2013-10-26 88 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]# 

它工作。

除了@之外,您還可以使用別的東西來獲得分隔符,如!?%。如果您有目錄路徑,請不要使用/