我有一个来自 /etc/group 的用户列表,我想将该行格式化为一列,我只需要用户。因此,如果一个字段如下所示:
bob,john,jane,sam,joyce
那么我希望它看起来像这样
bob
john
jane
sam
joyce
我知道如何做相反的事情但不知道如何做这种类型。
答案1
你可以用 sed 来做到这一点:
sed 's/,/\n/g'
这将,
用换行符替换所有出现的 。g
使 sed 替换一行中的所有出现而不是仅仅替换第一个。
答案2
使用您建议的标签来回答:
重击:
$ IFS=, read -a names <<< "bob,john,jane,sam,joyce"
$ printf "%s\n" "${names[@]}"
bob
john
jane
sam
joyce
awk:
$ echo "bob,john,jane,sam,joyce" | awk -F, -v OFS="\n" '{$1=$1; print}'
bob
john
jane
sam
joyce
该$1=$1
位是 awk 习语,用于使用输出字段分隔符重写当前记录,除非修改了某些字段,否则不会发生这种情况。
答案3
答案4
如果你想使用 awk(类似于使用 AWK 打印所有字段,并以 OFS 分隔):
echo "bob,john,jane,sam,joyce" | awk 'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'