在字符串中查找单词

Far*_*had 3 command-line regex grep

我想abc在字符串中查找单词(我只想要确切的单词 abc,而不是包含 abc 的单词),但出现以下错误:

echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep <abc>
Run Code Online (Sandbox Code Playgroud)

bash:意外标记“换行符”附近的语法错误

Zan*_*nna 6

您想要-o(仅显示匹配的字符串)和-w(仅将模式作为整个单词匹配)

$ echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep -ow abc
abc
Run Code Online (Sandbox Code Playgroud)

感谢 steeldriver 解释了如何实际使用<and>而不是-w指示单词边界。它们应该是\<\>但是必须引用反斜杠才能将其传递给 grep 以及<符号,因为它们对 shell 也具有特殊含义。如此强烈地引用这样的表达式:

echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep -o '\<abc\>'
Run Code Online (Sandbox Code Playgroud)

或者对反斜杠发疯:

echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep -o \\\<abc\\\>
Run Code Online (Sandbox Code Playgroud)

  • 我认为 OP 可能试图使用 `\&lt;` 和 `\&gt;` GNU 单词边界,即 `grep '\&lt;abc\&gt;'`(相当于你的 `-w` 标志 - 或 POSIX `'\babc\ b'`) (2认同)