我无法使用正则表达式让 grep 正常工作

我无法使用正则表达式让 grep 正常工作
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

这不应该是输出吗?

sarah saab marrrrrra

我尝试在 Windows 10 上使用 putty 和 nxclient。

答案1

您正在使用csh,它会看到*并尝试将其扩展为壳球并失败了。也就是说,csh这里说的是“不匹配”,而不是grep。不像伯恩家族贝壳csh不会将不可扩展的全局模式传递给命令,因此您必须引用它才能将csh其释放到grep.

我建议在这里使用单引号,因为您不想这样做将变量放入字符串中:

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

在这种情况下,双引号也可以使用,因为您的模式不包含$,但我还是建议在这里使用单引号。在允许您半互换使用引号的语言(例如 shell、Perl 等)中,仔细考虑使用哪些引号是一个值得养成的习惯。我们这里不需要字符串插值,因此我们将选择不使用允许它的引用样式。

顺便说一句,您也应该在 Bourne 系列 shell 下引用 RE 模式。正如迈克·瓦格纳(Mike Wagner)在上面的评论中暗示的那样,因为正则表达式和全局模式使用许多相同的特殊字符,有时你可以编写一个 RE 模式发生也匹配某些文件,因此意外地被 shell 扩展。

相关内容