我的文件包含以下文本
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
它允许行在字符串之后立即结束,但在其他情况下都需要一个空格。
看正则表达式信息有关正则表达式的更多信息。