我有多個替換規則,但只想使用第一個適用的規則。sed
預設情況下,繼續使用其餘規則處理輸出。第一次替換後如何中斷?是否可以僅使用sed
?我在手冊中找不到選項。
實際產量
$ sed "s/something/else/; s/one/two/; s/two/three/;" <<<"one"
three
所需操作
$ sed "s/something/else/; s/one/two/; s/two/three/;" <<<"one"
two
答案1
t
如果進行了替換,請在每個命令後使用該命令s
分支到腳本末尾:
sed -e 's/something/else/;t' \
-e 's/one/two/;t' \
-e 's/two/three/;t' <<<"one"
在這裡,t
不需要最後一個替換後的命令,但如果自動生成此程式碼,則讓它作為每個後綴s
,甚至是最後一個後綴也沒有問題。
答案2
在其他指令中使用分支「t」的 sed 是完美的答案。
這只是一個建議,如果你想在替換後在裡面做多個事情,你可以使用awk:
awk ' { if (gsub("something","else",$0) || gsub("one","two",$0) || gsub("two","three",$0) ){ print $0;exit}; }' <<<"one"
答案3
這些是按順序評估的,所以如果沒有圓圈並且您可以輕鬆做到這一點,您可以使用
s/two/three/; s/one/two/; s/something/else/
如果有一個圓圈,或者清單是從其他資料產生的,您可以使用標記,例如
s/@/@@/g
s/one/t@wo/
s/two/t@hree/
s/something/e@lse/
s/@\(.\)/\1/g