基本的に /etc/group からのユーザーのリストがあり、基本的にその行を 1 つの列にフォーマットしたいのですが、必要なのはユーザーだけです。フィールドが次のようになっているとします。
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(OFSで区切られたAWKのすべてのフィールドを印刷します):
echo "bob,john,jane,sam,joyce" | awk 'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'