如何打印包含两个正则表达式的文件中的行,其中一个是另一个正则表达式的子字符串

如何打印包含两个正则表达式的文件中的行,其中一个是另一个正则表达式的子字符串

如果文件有-

apple,orange,banana
orange
ora,orange,apple
apple,ora
orange,apple,ora,banana

我只想打印包含ora-orange的行

ora,orange,apple
orange,apple,ora,banana

答案1

与单埃格雷普

egrep 'ora\b.*orange|orange.*ora\b' file

输出:

ora,orange,apple
orange,apple,ora,banana

或与单sed表达:

sed -n '/orange/{/ora\b/p}' file
ora,orange,apple
orange,apple,ora,banana

在这两种方法中\b都使用了(字边界)。

答案2

Grep 获取整个单词:

$ grep -w orange foo.csv | grep -w ora
ora,orange,apple
orange,apple,ora,banana

-w意味着匹配的文本应该被非单词字符包围(单词字符是字母、数字、下划线)。

相关内容