用sed命令替换文件中的行

时间:2013-09-20 10:37:42

标签: linux bash sed sh

我有这个脚本:

#!/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命令在值字段中检测到/符号出现问题。如何解决此错误?

2 个答案:

答案 0 :(得分:3)

由于您的文件到处都有/,因此使用备用正则表达式分隔符会更好;它得到了sed。

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

答案 1 :(得分:2)

使用不同的分隔符:

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命令修改。

您可以使用任何未出现在要替换的值中的字符而不是%符号。记在脑子里。您也可以使用_;或字母,数字,无论您喜欢什么。它只是不能出现在值中。