Sed
如何在文本塊上使用 sed 執行多重替換?
我有文本文件,其中有一個具有如下模式的塊:
# cat file Jit .... enabled=false Jit ..shoes.. From=2021-01-01 Jit ..gloves.. From=2021-01-01
所以我想改變所有這些匹配的正則表達式,用這些行寫了一個 sed 文件。
# cat sedfile /^Jit/ { s/enabled=false/enabled=true/g s/From=\d+-\d+-\d+/From=2021-02-01/g }
僅以Jit
/^Jit/
開頭的模式greps 行和其他步驟進行替換。日期可以是任何東西,所以我不能硬編碼這些,因此需要匹配一個模式。期望的輸出:
Jit .... enabled=false Jit ..shoes.. From=2021-01-01 Jit ..gloves.. From=2021-01-01
Sed 不知道
\d
. 只需使用標準[0-9]
字元類:$ cat sedfile /^Jit/ { s/enabled=false/enabled=true/ s/From=[0-9]+-[0-9]+-[0-9]+/From=2021-02-01/ }
然後你可以這樣做:
line1 Jit .... enabled=false Jit .... From=2021-01-01 line4 $ sed -Ef sedfile file line1 Jit .... enabled=true Jit .... From=2021-02-01 line4
或者,沒有腳本文件:
$ sed -E '/^Jit/{s/enabled=false/enabled=true/; s/From=[0-9]+-[0-9]+-[0-9]+/From=2021-02-01/}' file line1 Jit .... enabled=true Jit .... From=2021-01-01 line4
我刪除了
g
修飾符,因為您似乎每行只出現一次模式。