grep 只匹配精确的单词,而不包含在另一个由空格包围的匹配中

grep 只匹配精确的单词,而不包含在另一个由空格包围的匹配中

我在包含字符串“完全匹配”的文件中出现了两次:

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意味着只显示第一个。

相关内容