如何以类似 grep 的方式将字符串与符号进行匹配?

如何以类似 grep 的方式将字符串与符号进行匹配?

我有一个包含以下内容(或类似内容)的文件:

# cat /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/

我试图通过匹配来验证其中是否存在条目,如下所示:

# grep --fixed-string "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/" /var/www/htpasswd
#

但它不匹配任何东西。有什么想法为什么和/或如何做吗?

我一开始以为这是美元符号,但这个有效:

# grep --fixed-string "foo:$ap" /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
#

答案1

使用单引号 ('),因此 $nnn 不会被视为变量。带有 " 的字符串是插值字符串,带有 ' 的字符串不会发生插值。

当您在该字符串前面添加 echo 时,只需查看输出即可。

$ echo "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/"
foo:3wJ8tiQ/
$ echo 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/'
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/

答案2

使用单引号,如下所示:

grep 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /vaw/www/htpasswd

答案3

您应该对 --fixed-strings 参数使用单引号而不是双引号,以避免在 grep 到达之前使用解释结果的 shell 出现问题: https://stackoverflow.com/questions/6697753/difference- Between-single-and-double-quotes-in-bash

grep --fixed-string 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /var/www/htpasswd

相关内容