0

この出力から文字列q9I9YP1V013809のみを抽出する方法:

q9I9YP1V013809     1472 Thu Oct 18 11:34  test@test.com 
                                          test1@test.com 
                                          test2@test.com 
                                          test3@test.com

期待されるビュー:

q9I9YP1V013809
4

5 に答える 5

2

多くの方法の1つ。最初のフィールドにが含まれていない場合は@、それを印刷します。

awk '$1 !~ /@/ { print $1; }' infile
于 2012-10-18T10:56:04.060 に答える
2

次のコマンドのように、文字の存在を確認するか、存在する@フィールドの数に基づいて入力できます。

awk 'NF > 5 { print $1 }' input.file
于 2012-10-18T11:04:17.023 に答える
2

私はします:

awk 'NF>1{print $1}' file

OPは期待される文字列のルールについて言及していなかったためです。'@'も含めることができます。

テスト:

kent$  echo "q9I9YP1V013809     1472 Thu Oct 18 11:34  test@test.com 
                                          test1@test.com 
                                          test2@test.com 
                                          test3@test.com"|awk 'NF>1{print $1}'
q9I9YP1V013809
于 2012-10-18T11:05:48.960 に答える
0

スペースで始まるすべての行をスキップし、残りのファイルのスペースの後のすべてを削除するには、次の手順を実行します。

grep -v '^ ' file.in | sed "s/ .*//"

awkと比較すると、2つのプロセスを開始する必要がありますが、が行われているのかがはるかに明確です。

別の解決策、sedのみ:

sed "/^ /d;s/ .*//" file.in

それほど明確ではありませんが、1つのプロセスのみです。最初のsedコマンド(/^ /d)は、スペースで始まるすべての行を削除します。2番目のコマンドは上記と同じです。

于 2012-10-18T10:57:33.207 に答える
0

それが常に最初の単語であり、他の行の前に空白が付いている場合は、次のようにします。

<infile grep -Eo '^[^[:blank:]]+'
于 2012-10-18T14:13:34.623 に答える