簡體   English   中英

用sed命令替換文件中的行

[英]replace line in file with sed command

我有這個腳本:

#!/bin/sh
local name="url"
local line='{ "name": "url", "value": "http:\/\/www.example.com\/dir1\/page1" }'

local name2="protocol"
local line2='{ "name": "protocol", "value": "ftp" }'

sed -i "/\<$name2\>/s/.*/$line2/" /mydir/myfile
sed -i "/\<$name\>/s/.*/$line/" /mydir/myfile

myfile包含:

{ "name": "url", "value": "http:\/\/www.example.com\/dir2\/page2" }
{ "name": "url2", "value": "http:\/\/www.example.net/page" }
{ "name": "protocol", "value": "http" }

我用sed命令在值字段中檢測到/符號有問題。 如何解決這個錯誤?

由於您的文件有/所有的地方它能夠更好地使用替代正則表達式分隔符 ; 它由sed支持。

sed -i "/\<$name2\>/s|.*|$line2|" /mydir/myfile
sed -i "/\<$name\>/s|.*|$line|" /mydir/myfile

使用這樣的其他分隔符:

sed -i "/\<$name2\>/s%.*%$line2%" /mydir/myfile

例如,這是我剛才所做的轉儲:

printf "eins x eins\nzwei x zwei\nabc x abc\ndef x def\n" | sed "/abc/s%x%y%"

它打印:

eins x eins
zwei x zwei
abc y abc
def x def

如您所見,僅包含abc的行被s命令修改。

除了使用%符號,您還可以使用任何未出現在要替換值中的字符。 記住這一點。 您也可以使用_; 或字母,數字,隨便你喜歡。 它只是不能出現在值中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM