如何 grep 包含点 (.) 的整个单词

如何 grep 包含点 (.) 的整个单词

我的文件包含以下文本

xyz.com       123  321
xyz.com.br    123  123
abcd.xyz.com  123  321

我想要 grep 仅包含 xyz.com 的行。即输出应该是第一行。

 xyz.com   123  321

尝试了以下方法,但无济于事。

grep "^xyz.com$" file.txt
grep '^xyz.com$' file.txt
grep -w xyz.com file.txt
grep '^xyz.com$' file.txt
grep '^xyz\.com$' file.txt
grep -Fx xyz.com file.txt
grep -w 'xyz.com' file.txt
grep -w 'xyz\.com' file.txt
grep '\sxyz.com\s' file.txt
grep '\bxyz.com\b' file.txt
grep "\bxyz.com\b" file.txt
grep "\<xyz.com\>" file.txt
grep '\<xyz.com\>' file.txt
grep -w -l "xyz\.com" file.txt
grep -w "xyz\.com" file.txt
grep -wF "xyz\.com" file.txt
grep -w "xyz\.com$" file.txt
grep -w "xyz\.com\$" file.txt

Shell 是 bash。谢谢。

答案1

$ grep '^xyz\.com[[:space:]]' file.txt
xyz.com      123 321
$ grep -P '^xyz\.com\s' file.txt
xyz.com      123 321

第一个使用 POSIXy 方式匹配空格,第二个使用 perly 方式,这意味着您需要-P使用 perl 正则表达式来指定。

答案2

在您的示例中,该行不只包含 xyz.com,它包含更多带有数字的列。这就是'^xyz\.com$'不起作用的原因。尝试:

grep '^xyz\.com\s' file.text

\s在表达式末尾添加,强制在搜索的字符串后添加一个空格字符,并允许其后添加其他文本。

要仅包含搜索字符串的行的情况,请尝试:

grep '^xyz\.com\(\s.*\)\?$' file.txt

它允许行在字符串之后立即结束,但在其他情况下都需要一个空格。

正则表达式信息有关正则表达式的更多信息。

相关内容