次のファイルがあります。
1 foo
1 bar
1 someOtherString
2 contains bar and more
2 test
3 contains a random string
4 some other string
2 don't remove this line bar
2 but remove this line
14 keep this line
21 and also this line
7 bar
このファイルから次のファイルをインポートしたいと思います。
1 foo
1 bar
2 contains bar and more
3 contains a random string
4 some other string
2 don't remove this line bar
14 keep this line
21 and also this line
7 bar
オリジナル:
- 「1」または「2」で始まらない行をすべて保持します。
- 「foo」または「bar」を含むすべての行を保持します。
- 他のすべての行を削除
- 注文をそのままにしてください
ベストアンサー1
というファイルのデータを考慮してくださいfile
。例の結果を得るための要件は、公開した説明とは少し異なります。
file
次のいずれかの条件に一致するすべての行を保持します。- nor(数字の後にスペースがある)で
1
始めないでください。2
- 含める
foo
かbar
- nor(数字の後にスペースがある)で
- 他のすべての行を削除
- 注文をそのままにしてください
perl
これは、2つの式を一致させ、一致するときにその行を(順番に)印刷することによって表現できます。
perl -ne '( !/^(1 |2 )/ or /foo|bar/ ) and print' file
振り返ってみると、要件全体がわずかに異なるように表現されている可能性があります。
- 各行ごとに順番に
1
行がまたはで始まらない場合は、その行を印刷します。2
foo
またはbar
これはawk
非常に便利にマッピングされます。
awk '!/^(1 |2 )/ || /foo/ || /bar/' file
どちらの場合でも、REは共通の要因を導き、次のようperl
に書き直すことで単純化できます。awk
^(1 |2 )
^[12]
perl -ne '( !/^[12] / or /foo|bar/ ) and print' file
awk '!/^[12] / || /foo/ || /bar/' file