Bash:将线分割成多行

时间:2016-04-18 08:47:01

标签: bash split

我有一个单词列表:

aaaa bbbb ccc dddd
eee fff ggg hhh
iii jjj kkk

我希望每个单词都在一个单独的行中:

aaaa
bbbb
ccc
dddd
eee
fff
ggg
hhh
iii
jjj
kkk

如何在最少字符数的bash中执行此操作?没有awk最好。

1 个答案:

答案 0 :(得分:6)

使用纯粹的bash:

while IFS=" " read -r -a line
do
    printf "%s\n" "${line[@]}"
done < file

请参阅:

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

使用xargs

xargs -n 1 < file

使用awk

awk '{for(i=1;i<=NF;i++) print $i}' file

awk -v OFS="\n" '$1=$1' file

使用sed

sed 's/ /\n/g' file

使用cut

cut -d' ' --output-delimiter=$'\n' -f1- file

使用grep

grep -o '[^ ]\+' file

grep -Po '[^\s]+' file