Linux
如何使用 sed 替換多行字元串?
我嘗試了以下命令:-
[root@10 bin]# cat temp asdjahskjdhajksdhjkashjahfksjdhfkjsddhflkdsjhfklsdajhfklajshdkjalsdlkjasdhkljas hskdajkdhkjas cast $recv $UE_CAPABILITY_ENQUIRY set trans_id [ string range $recv 42 43 ] [root@10 bin]# sed -ir '/^cast \$recv \$UE_CAPABILITY_ENQUIRY$/{$!{N;s/^cast \$recv \$UE_CAPABILITY_ENQUIRY\nset trans_id \[ string range \$recv 42 43 \]$/cast \$recv \$UE_CAPABILITY_ENQUIRY \nset trans_id 1/;ty;P;D;:y}}' temp
我想換
cast $recv $UE_CAPABILITY_ENQUIRY set trans_id [ string range $recv 42 43 ]
和
cast $recv $UE_CAPABILITY_ENQUIRY set trans_id 1
但是上面的命令不起作用。有人可以指出我的錯誤。
由於您實際上並沒有更改“演員”行:
sed '/cast \$recv \$UE_CAPABILITY_ENQUIRY/{a\ set trans_id 1 n;d}' file
正如 Kusalananda 評論的那樣,這個命令:
當找到想要的“演員”行之一時:
a
追加新行- 從文件中取出
n
ext 行(不需要的“set”行)- 並
d
刪除它事後看來,這並不能確認刪除行是您要刪除的行。我會將其更改為:
sed ' /cast \$recv \$UE_CAPABILITY_ENQUIRY/ { n /set trans_id \[ string range \$recv 42 43 \]/ { i\ set trans_id 1 d } } ' file
對於文件遞歸:
find . type f | xargs sed -i '' -e '...'
使用 GNU 工具,更安全
find . type f -print0 | xargs -0 sed -i '' -e '...'