Grep 如何在空格之间搜索完整的单词?

Grep 如何在空格之间搜索完整的单词?,grep,whitespace,Grep,Whitespace,我需要在这些文件中找到一组文本文件和一组关键字。然而,我只对匹配“完整单词”感兴趣,即whotespaces之间的字符串。例如,如果我有文本 line1: word1 word2, line2: word3 word22 line3: word4 aword2 如果搜索word2,我只想得到第1行,而不是第2行或第3行。另外,我需要知道匹配发生的行,所以我不能在一袋单词中打开每个文本文件并在那里搜索 我能用grep做这个吗?如果是,怎么做?还是有更好的选择 另外,如果我想搜索一个短语,例如 l

我需要在这些文件中找到一组文本文件和一组关键字。然而,我只对匹配“完整单词”感兴趣,即whotespaces之间的字符串。例如,如果我有文本

line1: word1 word2,
line2: word3 word22
line3: word4 aword2
如果搜索
word2
,我只想得到第1行,而不是第2行或第3行。另外,我需要知道匹配发生的行,所以我不能在一袋单词中打开每个文本文件并在那里搜索

我能用grep做这个吗?如果是,怎么做?还是有更好的选择

另外,如果我想搜索一个短语,例如

line1: word1 word word2,
line2: word3 word word22
line3: word4 wword word2

如果我想搜索“word word2”,应该只生成第1行

grep -E "(^|\W)word2($|\W)" mytestfile.txt
同样的事情也应该适用于第二个场景

grep -E "(^|\W)word word2($|\W)" mytestfile.txt
E表示扩展regexp(egrep)。(^ |\W)将匹配行首或非字母数字字符(^a-zA-Z0-9)。($|\W)将匹配行尾或非alaphnumeric字符


我在OSX上测试了它,但我认为它在几乎任何系统上都能正常工作(GNU Grep也有一个-E选项)。

我想你正在寻找类似的东西

grep -E "(^|\W)word2($|\W)" mytestfile.txt
同样的事情也应该适用于第二个场景

grep -E "(^|\W)word word2($|\W)" mytestfile.txt
E表示扩展regexp(egrep)。(^ |\W)将匹配行首或非字母数字字符(^a-zA-Z0-9)。($|\W)将匹配行尾或非alaphnumeric字符


我在OSX上对此进行了测试,但我认为它在几乎任何系统上都能正常工作(GNU Grep也有一个-E选项)。

这就是您有
Grep
for及其所有选项的地方:

-w,--word regexp
:仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行的开头或前面有一个非单词组成字符。类似地,它必须位于行尾或后跟非单词组成字符。单词组成字符是字母、数字和下划线

来源:
man grep


这是您拥有的
grep
及其所有选项的位置:

-w,--word regexp
:仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行的开头或前面有一个非单词组成字符。类似地,它必须位于行尾或后跟非单词组成字符。单词组成字符是字母、数字和下划线

来源:
man grep


小心,pcre2grep的用户!在regexp中使用-w选项或\w不能很好地处理重音字符。例如,使用“(^ |\W)class($|\W)”会导致以下两行也被匹配:

“小诗”

“第二类分段”

从本例中可以看出,重音e不被视为构词字符


(注意:我正在使用pcre2grep 1022-GNU grep 2.0d)

小心,pcre2grep的用户!在regexp中使用-w选项或\w不能很好地处理重音字符。例如,使用“(^ |\W)class($|\W)”会导致以下两行也被匹配:

“小诗”

“第二类分段”

从本例中可以看出,重音e不被视为构词字符


(注意:我正在使用pcre2grep 1022-GNU grep 2.0d)

如果“word2”不匹配,为什么“word22”会匹配word2?你说得对,谢谢,我的打字错误。更正你说你想在whotespaces之间匹配
字符串,那么
word2
是否会与第一行不匹配,因为它出现的唯一位置是在
word2,
的上下文中,即不被空格包围?也许“分隔符”比“空格”更合适,如果“word2”,为什么“word22”会与word2匹配不是吗?你说得对,谢谢,我的打字错误。更正您说您想在whotespaces
之间匹配
字符串,因此
word2
与第一行不匹配,因为它出现的唯一位置是在
word2,
的上下文中,即不被空格包围?也许“分隔符”比“空格”更合适