我正在尝试使用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?
答案 0 :(得分:2)
\
之前您不需要url
。
sed -i -r 's#url\s*=\s*"[^"]+"#url = "page2.php"#' /home/site.js
使用"
代替'
"
的额外转义
当字符串本身可能包含/
#
不同的分隔符(此处为/
)
答案 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路径,请不要使用/
。