我想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
任何人都知道如何解决这个问题?
答案 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