grep操作をネストする方法を探しているので、最初のgrepが一致しない場合は入力に次のものを使用しますが、一部のgrepが正常に終了するとチェーンが破棄されます。
最初のgrepで失敗すると予想しecho $'b\nc\nd' | { grep 'a' || grep 'b' || grep 'c' || grep 'd'; }
て2番目のgrepが成功し、完了すると、グローバル出力は「b」になります。
その後、grepにフラグを付けて入力をそのまま出力すると、何も一致しない場合、より簡単な方法があると思いました。だからそれは同じです
echo $'b\nc\nd' | grep --if-error-print-input 'a' | grep --if-error-print-input 'b' | grep --if-error-print-input 'c' | grep --if-error-print-input 'd'
入出力例
echo $'Foo\nBar' | grep -e 'Bar' -e 'Foo' | head -n 1
Foo
Bar
優先順位があるので、私が期待する場所
ベストアンサー1
awk
あなたがしたいことsed
はでのみ行うことができますが、個別には不可能ですgrep
。
$ cat regexes
c
b
a
最初の一致行はパターンごとに保存する必要があります(最も高い一致より優先順位の低い行を除く)。
echo $'b\nc\nd' |
awk 'BEGIN { while (getline regex <"regexes") regexes[i++]=regex; num=i; limit=i; };'\
'{ for(i=0;i<limit;i++) { if($0~regexes[i]) { regexmatch[i]=$0; limit=i; if (i==0) { exit; } else break; }; }; };'\
'END { for(i=0;i<num;i++) if (regexmatch[i]!="") { print regexmatch[i]; exit; }; }'
c