grepを使用するときにリテラルバックスラッシュを含む文字列を検索する方法は?

grepを使用するときにリテラルバックスラッシュを含む文字列を検索する方法は?

\Gバックスラッシュを含む文字列を検索したいですgrep

$ echo "\G\\G" > /tmp/test
$ grep '\G' /tmp/test 
\G\G
$ grep '\\G' /tmp/test 
\G\G
$ grep "\\G" /tmp/test 
\G\G
$ grep "\G" /tmp/test 
\G\G

赤色で一致するものについては、下のスクリーンショットもご覧ください。

ここに画像の説明を入力してください。

なぜ動作するのか知りたいです'\\G'。それはbashですか、それともbashとgrepですか?ありがとうございます。

ベストアンサー1

grepこれは、シェルが見るものとシェルが見るものに関連しています。だから両方とも少し。

grepさまざまな形式の引用について表示される内容を表示するには、次を使用します。

printf '<%s>\n' G "G" 'G' \G "\G" '\G' \\G "\\G" '\\G'

これは何を見せるのかシェルさまざまな種類の参照に関連しています。


grepのみ表示されている場合は、G一致するもののみを検索し、設定に従って強調表示しますG

grepバックスラッシュの後にaが表示されるとG(あなたの実装とおそらくすべての現在の実装で)バックスラッシュが文字の特別な意味を取り除くと思いますG。しかし、特別な意味はないので、G結果はちょうど通過したのと同じですG

2つのバックスラッシュがある場合、grep最初のバックスラッシュは2番目のバックスラッシュの特別な意味を取り除きます。したがって、grepseeを使用すると、\\G文字通りバックスラッシュを検索してからG

固定文字列を取得するために-Fフラグを使用している場合は、justを渡して同じ結果を得ることができます。 (つまり、このように渡すとgrep\G\Ggrep より \G、何らかの方法でバックスラッシュをエスケープする必要があります。シェル削除されません。 )

おすすめ記事