grep
でバックスラッシュ(\
)を検索する機会があったのですが、意外にも「はまった」のでメモとして対応策を残しておきたいと思います。
まず文字列の囲み文字/リテラルとしてダブルクオート("
)を利用する場合は\\\\
を利用します。わかりにくいですが、__バックスラッシュを4つ重ねて初めてバックスラッシュひとつになります。__つまり\a
という文字を検索したい場合は\\\\a
とする必要があります。
cat ${some_file} | grep "\\\\" # バックスラッシュを含む行を抽出する
cat ${some_file} | grep "\\\\a" # \aを含む行を抽出する
次にシングルクオート('
)を利用する場合は\\
が正解です。ダブルクオートによるリテラル文字列とは違い、__バックスラッシュはふたつしか重ねる必要がありません。__つまり\a
であれば\\a
と書けばgrep
で検索することができます。
cat ${some_file} | grep '\\' # バックスラッシュを含む行を抽出する
cat ${some_file} | grep '\\a' # \aを含む行を抽出する