我试图使用grep来匹配包含两个不同字符串的行。我已经尝试了以下方法,但这匹配了包含不是我想要的string1或string2的行。
grep 'string1\|string2' filename
那么我如何匹配与grep只包含两个字符串的行?
我试图使用grep来匹配包含两个不同字符串的行。我已经尝试了以下方法,但这匹配了包含不是我想要的string1或string2的行。
grep 'string1\|string2' filename
那么我如何匹配与grep只包含两个字符串的行?
当前回答
假设我们需要在文件testfile中找到多个单词的计数。 有两种方法
1)使用grep命令与regex匹配模式
grep -c '\<\(DOG\|CAT\)\>' testfile
2)使用egrep命令
egrep -c 'DOG|CAT' testfile
使用egrep,您无需担心表达式,只需通过管道分离器分离单词。
其他回答
grep ‘string1\|string2’ FILENAME
GNU grep 3.1版
我觉得这就是你想要的
grep -E "string1|string2" filename
我认为答案是这样的:
grep 'string1.*string2\|string2.*string1' filename
只匹配两者都存在的情况,而不是其中一个或另一个或两者都存在的情况。
对于多行匹配:
echo -e "test1\ntest2\ntest3" |tr -d '\n' |grep "test1.*test3"
or
echo -e "test1\ntest5\ntest3" >tst.txt
cat tst.txt |tr -d '\n' |grep "test1.*test3\|test3.*test1"
我们只需要删除换行符,它就工作了!
如果git被初始化并添加到分支,那么最好使用git grep,因为它非常快,它会在整个目录内搜索。
git grep 'string1.*string2.*string3'
你可以尝试这样做:
(pattern1.*pattern2|pattern2.*pattern1)