ファイル内の次の文字列を grep したいと思います。
directory1
directory2
directory3
grep で 3 つすべてを同時に grep する方法はありますか?
例えば:
cat file.txt | grep directory[1-3]
残念ながら、上記は機能しません
検索する必要がある文字列がこれらだけの場合は、-F
(固定文字列の場合はgrep)を使用します。
grep -F "directory1
directory2
directory3" file.txt
より高度な正規表現を使用してgrepを実行する場合は、次を使用します-E
(拡張正規表現を使用)。
grep -E 'directory[1-3]' file.txt
一部grep
のs(GNU grepなど)は-E
、この例が機能するために必要ではないことに注意してください。
最後に、正規表現を引用する必要があることに注意してください。そうしないと、シェルは最初にパス名の展開に従って正規表現を展開する傾向があります(たとえば、現在のディレクトリに「directory1」というファイル/ディレクトリがある場合は、シェルによってgrep directory[1-3]
変換さgrep directory1
れます)。
どのシェルでテストしましたか?
ここ
grep directory[1-3]
bash では動作しますが、zsh では動作しません
あなたはどちらかを引用することができます"directory[1-3]"
または逃げるgrep directory\[1-3\]
bash v4.2
zsh v5.0.2
grep (GNUgrep 2.14)