awk不区分大小写和布尔运算符

时间:2013-03-13 07:22:22

标签: awk operators case-insensitive

我想grey包含任何顺序的两种模式的行,我正在使用

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 个答案:

答案 0 :(得分:4)

尝试:

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

GNU awk中也有IGNORECASE选项的可能性。


你也可以大部分时间做这样的事情:

grep -Ei 'pattern1.*pattern2|pattern2.*pattern1' file

答案 1 :(得分:2)

您也可以使用grep

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

虽然它不会像使用两遍来找到线那样高效。

您可以使用sed一次通过:

sed '/pattern1/I!d;/pattern2/I!d/' file.txt

答案 2 :(得分:2)

awk '/pattern1/ && /pattern2/i' file.txt会忽略模式/pattern2/

如果您想忽略此案例,请完全添加IGNORECASE = 1

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

答案 3 :(得分:1)

只需将命令更改为:

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

或者,您可以使用perl:

perl -lne 'print if(/pattern1/i and /pattern2/i)' your_file