基本的に/ etc/groupのユーザーのリストがあります。基本的に、その行を1つの列にフォーマットしたいので、ユーザーが必要です。したがって、フィールドが次のようになっている場合:
bob,john,jane,sam,joyce
それならこんな感じにしたいです
bob
john
jane
sam
joyce
私は反対の方法を知っていますが、このタイプは知りません。
あなたはsedでこれを行うことができます:
sed 's/,/\n/g'
これにより、出現するすべての,
が改行に置き換えられます。 g
は、sedに、最初のオカレンスだけでなく、行内のすべてのオカレンスを置き換えさせます。
提案されたタグを使用して回答するには:
bash:
$ 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イディオムです。これは、一部のフィールドが変更されない限り発生しません。
いくつかのオプション:
tr:
tr ',' '\n' < [input file] > [output file]
trは、標準入力をフィルタリングし、最初の引数から出現するすべての文字を2番目の要素からの一致する文字に置き換えてから、標準出力に出力するツールです。
vim/ex(これはスクリプトで機能します):
vim -c "%s/,/\r/g" -c "wq" [input file]
-cオプションは、vimに次のex
コマンドを実行するように指示します(vimを通常使用するときに:
の後に入力するものと同じです)。
そして、誰かがすでに私を殴って殺した。
Awkを使用したい場合( AWKをOFSで区切ってすべてのフィールドを印刷する と同様):
echo "bob,john,jane,sam,joyce" | awk 'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'