ssh没有正确更改变量

时间:2013-10-26 18:59:51

标签: bash ssh sed

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

以下是行:var url = "page.php";我希望将page.php替换为whatever.php。

我认为这很简单,我认为这样可以解决问题:

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

它可以正常使用,除了获取:var url = "page2.php";我得到:var R1 = "page2.php";

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

3 个答案:

答案 0 :(得分:2)

\之前您不需要url

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

使用"代替'

封装sed表达式,可以消除"的额外转义

当字符串本身可能包含/

时,最好使用与#不同的分隔符(此处为/

答案 1 :(得分:1)

尝试这样做:

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

/不是强制性的分隔符,我在那里选择了@

答案 2 :(得分:1)

这是另一个例子:我想知道你更改了/的分隔符而不是目录路径中的/

如果您有dir路径名,请使用@代替/作为sed分隔符。

首先我尝试了这个:

[root@ip-172-35-24-37 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分隔符而不是/

[root@ip-172-35-24-37 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
[root@ip-172-35-24-37 ec2-user]#

它有效。

您可以使用@以外的其他内容作为!?%等分隔符。如果您有dir路径,请不要使用/