Bash
如何將 grep/sed 作為安全備份
我正在尋找一種嵌套 grep 操作的方法,因此如果第一個 grep 不匹配,則在輸入上使用以下內容,但如果某些 grep 成功退出,則鏈會中斷
我嘗試
echo $'b\nc\nd' | { grep 'a' || grep 'b' || grep 'c' || grep 'd'; }
期望它在第一個 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
因為它有優先權
你想要的東西可以用
awk
only 但不能用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