複数行にgrepステートメントを記述できますか?

複数行にgrepステートメントを記述できますか?

1行に1つのパターンを作成してスクリプトを読みやすくしたいと思います。

grep 'foo\|bar\|barz'以下のように変換できる構文はありますか?

grep 'foo\|
      bar\|
      barz'

ベストアンサー1

パターンパラメータは、実際に改行で区切られたパターンのリストです。これは次の場合も同様ですgrep -F。複数の文字列を検索できます。したがって、次のように書くことができます。

grep 'foo
bar
barz'

ただし、連続した行はインデントしないでください。先行スペースはパターンの一部になります。したがって、パターンリストを-e各パターンの前に別々の引数として渡すことをお勧めします。その後、\行の終わりにatを使用して、コマンド引数間の行にわたってシェルコマンドを分割できますgrep。どちらの構文も同じです。

grep -e 'foo' \
     -e 'bar' \
     -e 'barz'

grepオプションを渡すと-P(PCRE正規表現の場合)、それらのどれも現在のバージョンのGNUでは機能せず、その場合は表示に失敗します。ただし、GNUの代わりにgrep: the -P option only supports a single pattern使用でき、フラグを使用して複数行を入力できます。pcregrepgrep -Px

pcregrep '(?x)
  foo |
  bar |
  barz'

を使用すると、(?x)すべての空白文字(SPCとNLを含む)が無視されるため、必要に応じてコードをインデントできます。

おすすめ記事