2013-10-26 50 views
0

我正在尝试使用sed更改我的服务器上的site.js文件中的变量。ssh sed不能正确更改变量

这是行:var url = "page.php";我正在寻找替换page.php for whatever.php。

我想这将是非常简单的,我想这将没有问题的工作:

sed -i "s/\url = \".*\"/\url = \"page2.php\"/" /home/site.js 

这工作好除了没有获得:var url = "page2.php";我得到:var R1 = "page2.php";

为什么url值当我在这里使用sed时被更改为R1?

+0

为什么你在'url'前加反斜杠? –

回答

2

您在url之前不需要\

sed -i -r 's#url\s*=\s*"[^"]+"#url = "page2.php"#' /home/site.js 

"额外的转义可以通过封闭SED表达的'代替"

这是更好地使用不同的分离比/(这里#)被淘汰时,字符串本身可能包含/

+0

感谢这是网址前的\,我在那里犯了一个错误。 – jcrane

1

试试这样做:

sed -i -r '[email protected](var\s+url\s*=\s*")[^"]+"@\1whatever.php"@' file.js 

/不是强制性的分隔符,我在那里拿起@

1

下面是另一个示例:请带我一边指出,您在目录路径中更改了/作为分隔符,而不是/。如果您有目录路径名,则使用@而不是/作为sed分隔符。

首先,我想这:

[[email protected] ec2-user]# egrep -q "^(\s*\S+\s+)/dev/shm(\s+\S+\s+\S+)(\s+\S+\s+\S+)(\s*#.*)?\s*$" /etc/fstab && sed -ri "s/^(\s*\S+\s+)/dev/shm(\s+\S+\s+\S+)(\s+\S+\s+\S+)(\s*#.*)?\s*$/\1/dev/shm\2nodev\3\4/" /etc/fstab 

而得到这个错误:

sed: -e expression #1, char 20: unknown option to `s' 

于是我用@的sed的分隔符,而不是/

[[email protected] ec2-user]# egrep -q "^(\s*\S+\s+)/dev/shm(\s+\S+\s+\S+)(\s+\S+\s+\S+)(\s*#.*)?\s*$" /etc/fstab && sed -ri "[email protected]^(\s*\S+\s+)/dev/shm(\s+\S+\s+\S+)(\s+\S+\s+\S+)(\s*#.*)?\s*[email protected]\1/dev/shm\2nodev\3\[email protected]@" /etc/fstab 
[[email protected] ec2-user]# 

它工作。

除了@之外,您还可以使用别的东西来获得分隔符,如!?%。如果您有目录路径,请不要使用/