スクリプト内に複数行でgrep
パターンを作成する方法は?bash
そう:
grep -o -P '
(?!<.*?(?<!(href))=")
https?:\/\/(?!(www\.example\.com)).*?
(?=(">))
' input.txt
プログラムを書くときにこれを行うことphp
ができます。これでbashスクリプトでこれを試しましたが、うまくいきません。一行に書くのがとても不便です。
おそらくパターン内の書式を許可するオプションがあります。つまり、grep
このオプションを有効にすると、スペース(スペースと改行)は認識されません。
グレブバージョン:
grep -V
grep (GNU grep) 2.25
答え1
-P
それにもかかわらず、(?x:)
改行文字を無視することはできません。スペースとタブの場合、次のように動作します。
echo abab | grep -P $'(?x:a b a\tb)'
しかし、改行文字は異なる動作をします。
echo ab | grep -P $'(?x:a\nb)'
grep: the -P option only supports a single pattern
少なくともGNU grep 2.16では。
答え2
grep
さまざまなパターンを区別するには、改行を使用してください。ただし、パターンを変数に保存し、次に渡す前にスペースを削除できますgrep
。
$ ws=$' \t\n'
$ pat=$'a b\nc'
$ echo abcd | grep "${pat//[$'\n\t ']}"
abcd
(もっと複雑なものはテストしていません。)