我在包含字符串“完全匹配”的文件中出现了两次:
this is an 'exact match'
this is 'another exact match' line
如果我这样做,grep -w 'exact match' file.txt
我就会收到这两种情况。
我只想收到第一次出现的情况(完全匹配)。
我也尝试过:
grep -e '\bexact match\b' file.txt
grep -e '\<exact match\>' file.txt
但它们都会产生不希望的两种情况。
使用 grep 执行此操作的正确方法是什么?
答案1
如果您想匹配单引号,请在模式中包含这些:
$ grep -F "'exact match'" file
this is an 'exact match'
请注意,我在模式周围使用双引号,因为单引号字符串永远不能包含单引号。由于查询字符串是双引号的,因此字符串内的任何 shell 变量或命令替换都将被扩展。
其他方式:
$ grep -F "'"'exact match'"'" file
this is an 'exact match'
这仅在单引号周围使用双引号,同时单引号字符串exact match
。字符串中的 shell 变量等不是被扩大。
您还可以使用\''exact match'\'
单引号字符串并“转义”两侧的文字单引号,但我个人认为它看起来有点难看。
答案2
如果只想提取结果的第一个并发,这样就足够了:
grep -m1 'exact match' file.txt
-m指定并发数和1意味着只显示第一个。