重击:将行拆分为多行

haa*_*ael 1 bash split

我有一行单词的列表:

aaaa bbbb ccc dddd
eee fff ggg hhh
iii jjj kkk
Run Code Online (Sandbox Code Playgroud)

我想要每个单词放在单独的行中:

aaaa
bbbb
ccc
dddd
eee
fff
ggg
hhh
iii
jjj
kkk
Run Code Online (Sandbox Code Playgroud)

如何在字符最少的 bash中做到这一点?最好没有awk。

fed*_*qui 8

使用纯bash:

while IFS=" " read -r -a line
do
    printf "%s\n" "${line[@]}"
done < file
Run Code Online (Sandbox Code Playgroud)

看到:

$ while IFS=" " read -r -a line; do printf "%s\n" "${line[@]}"; done < file
aaaa
bbbb
ccc
dddd
eee
fff
ggg
hhh
iii
jjj
kkk
Run Code Online (Sandbox Code Playgroud)

xargs

xargs -n 1 < file
Run Code Online (Sandbox Code Playgroud)

awk

awk '{for(i=1;i<=NF;i++) print $i}' file
Run Code Online (Sandbox Code Playgroud)

要么

awk -v OFS="\n" '$1=$1' file
Run Code Online (Sandbox Code Playgroud)

sed

sed 's/ /\n/g' file
Run Code Online (Sandbox Code Playgroud)

cut

cut -d' ' --output-delimiter=$'\n' -f1- file
Run Code Online (Sandbox Code Playgroud)

grep

grep -o '[^ ]\+' file
Run Code Online (Sandbox Code Playgroud)

要么

grep -Po '[^\s]+' file
Run Code Online (Sandbox Code Playgroud)