无法使用反斜杠转义点,为什么?

无法使用反斜杠转义点,为什么?

因此,以下是我运行的命令:

$ ~/Documents: touch ball.txt bool-txt bowl.txt bull.txt
$ ~/Documents: ls . | grep b..l\.txt
ball.txt
bool-txt
bowl.txt
bull.txt

我没想到bool-txt它会出现在输出中,因为我已经转义了点,但它仍然不认为它是一个文字点。我哪里做错了?

答案1

我确信这是某个问题的重复,但我找不到它。在 Unix SE 上https://unix.stackexchange.com/questions/583428/why-do-i-have-to-quote-an-escaped-character-in-a-regular-expression-for-grep-bu

当您使用 时grep b..l\.txt,shell 会将其转换\.为,.因此 grep 会接收b..l.txt,然后它会将其解释.为任何字符。

为了防止这种情况,最简单的方法是给 grep 一个像 这样的字符串grep 'b..l\.txt',这样 shell 就不会转义点。请注意,单引号和双引号在 bash 中的作用不同,但在本例中这并不重要。或者,使用双反斜杠,这样 shell 就会将反斜杠转义为文字字符,而 grep 会正确接收\.

相关内容