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

grep が到着する前にシェルが結果を解釈する問題を回避するには、引数 --fixed-strings に二重引用符の代わりに一重引用符を使用する必要があります。 https://stackoverflow.com/questions/6697753/difference- Between-single-and-double-quotes-in-bash

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

関連情報