1

両方のパターンを任意の順序で含む行をgrepしたいので、使用しています

awk '/pattern1/ && /pattern2/' file.txt

ただし、大文字と小文字を区別しない検索を実行する場合、/iの追加はpattern2に追加した場合にのみ機能します。

awk '/pattern1/ && /pattern2/i' file.txt ...works

awk '/pattern1/i && /pattern2/i' file.txt ...don't, outputs the whole file

誰かがこれを解決する方法を知っていますか?

4

4 に答える 4

4

試す:

awk '{s=tolower($0)} s~/lowercase_pattern1/ && s~/lowercase_pattern2/' file

IGNORECASEGNUawkのオプションの可能性もあります。


また、ほとんどの場合、次のようなことを行うことができます。

grep -Ei 'pattern1.*pattern2|pattern2.*pattern1' file
于 2013-03-13T08:01:31.940 に答える
2

また、使用することができますgrep

grep -i "pattern1" file.txt | grep -i "pattern2.txt"

2つのパスを使用して線を見つけるほど効率的ではありませんが。

sed1回のパスでそれを行うものを使用できます。

sed '/pattern1/I!d;/pattern2/I!d/' file.txt
于 2013-03-13T08:24:39.160 に答える
2

awk '/pattern1/ && /pattern2/i' file.txt パターンを無視します/pattern2/

ケースを完全に無視したい場合は、を追加してIGNORECASE = 1ください。

すなわち。

awk 'BEGIN {IGNORECASE = 1} /pattern1/ && /pattern2/' file.txt

于 2014-10-17T09:16:49.753 に答える
1

コマンドを次のように変更するだけです:

awk 'tolower($0)~/pattern1/ && tolower($0)~/pattern2/' your_file

または、perlを使用することもできます。

perl -lne 'print if(/pattern1/i and /pattern2/i)' your_file
于 2013-03-13T09:17:42.463 に答える