匹配文本文件中包含两个关键字的行

匹配文本文件中包含两个关键字的行

样本文件

ssdnaslcnasjkdlcnljaksjcnaslcnlasncadcadsoadsklfjewilfm Warning error ascacs
kjasdncijojencikmasklcmioewmnconmqewciomnweiocn warning
sakcjnaksldnmclkasdmnckljamnklckmalc aslenkjlansdcledlkamsc error
alscmkklamclkamscklmnaeuye error warning

我只想获取同时具有“错误”和“警告”的行。

答案1

区分大小写:

sed '/warning/!d; /error/!d' < file

或者

awk '/warning/ && /error/' < file

或者

grep warning < file | grep error

不区分大小写:

GNU

sed '/warning/I!d; /error/I!d' < file
gawk -v IGNORECASE=1 '/warning/ && /error/' < file

标准

grep -i warning < file | grep -i error
awk '{l = tolower($0)}; l ~ /warning/ && l ~ /error/' < file
sed '/[wW][aA][rR][nN][iI][nN][gG]/!d; /[eE][rR][rR][oO][rR]/!d' < file

(该方法的优点是它不依赖于区域设置;例如,其他方法可能无法匹配 WARNING,而在某些区域设置中匹配 WARNÁ)。

答案2

解决此问题的另一种更简单的方法:grep -Ei 'error.warning|warning.error'

相关内容