NetBSDの特定のテキストファイル行から特定の単語を取得する

NetBSDの特定のテキストファイル行から特定の単語を取得する

以下のリストからメンバー名を抽出して新しいファイルに出力するにはどうすればよいですか?

Group-name supernatural 
Members admin, Admin1, John, sam, dean 
Group-id 405

newfile.txtの期待される出力:

admin
Admin1
John
sam
dean

ベストアンサー1

$ awk '/^Members/ { for (i=2; i<=NF; ++i) { sub(",$", "", $i); print $i } }' file
admin
Admin1
John
sam
dean

awkこれは文字列で始まる行を見つけるために使用されますMembers。そのような行が見つかったら、2番目のフィールドから始めて、その行のスペースで区切られたフィールドを繰り返します。各フィールドには、独自の行に印刷される前に末尾のカンマ(存在する場合)が削除されます。

出力を保存するには、出力を新しいファイルにリダイレクトし、次を使用します。

awk ...as above... file >newfile

使用sed:

$ sed -n '/^Members[[:blank:]]*/{ s///; s/,[[:blank:]]*/,/g; y/,/\n/; p; }' file
admin
Admin1
John
sam
dean

その文字列で始まる行を見つけて、Membersその文字列とそれに続くスペース(タブまたはスペース)を削除します。次に、行の残りの部分でコンマの後のすべてのスペースを削除し、結果リストを印刷する前にコンマを改行に変更します。

GNUを使用すると、sed次のように組み合わせることができます。

s/,[[:blank:]]*/,/g; y/,/\n/; p;

入力する

s/,[[:blank:]]*/\n/gp;

おすすめ記事