我想搜索並替換爲sed,並用變量中的某些內容替換,其中包含一些特殊符號,如&
。sed with&in變量
比如我做了這樣的事情:
sed "s|http://.*|http://$URL|"
其中URL=1.1.1.1/login.php?user=admin&pass=password
。我認爲這成了一個問題,因爲我在我的變量中使用了?
和&
。
我該如何執行搜索和替換?
由於在替代提前
我想搜索並替換爲sed,並用變量中的某些內容替換,其中包含一些特殊符號,如&
。sed with&in變量
比如我做了這樣的事情:
sed "s|http://.*|http://$URL|"
其中URL=1.1.1.1/login.php?user=admin&pass=password
。我認爲這成了一個問題,因爲我在我的變量中使用了?
和&
。
我該如何執行搜索和替換?
由於在替代提前
?
是沒有問題的。 &
需要轉義爲\&
。
以下爲我工作(在bash腳本):
URL="1.1.1.1/login.php?user=admin\\&pass=password"
echo "http://something" | sed -e "s|http://.*|http://$URL|"
產量爲:
http://1.1.1.1/login.php?user=admin&pass=password
我認爲OP不能手動添加反斜槓 – ghostdog74 2010-01-18 11:33:30
嗯,我認爲你是對的,但我必須回到這個轉折,它已經越來越遲了 – pavium 2010-01-18 12:26:04
用awk
URL="1.1.1.1/login.php?user=admin&pass=password"
awk -vurl="$URL" '/http:\/\//{ gsub("http://" , "http://"url) }1' file
但你真的相信你只是想替換http:// ??
awk將一個替換字符串與一個和號與sed一樣。 – 2012-01-20 18:51:27
$ URL="1.1.1.1/login.php?user=admin&pass=password"
$ echo "http://abcd" | sed -e "\|http://.*|c$URL"
1.1.1.1/login.php?user=admin&pass=password
URL="1.1.1.1/login.php?user=admin&pass=password"
URL=$(echo "$URL" | sed 's/&/\\&/') # substitute to escape the ampersand
echo "$OTHER" | sed "s|http://.*|http://$URL|"
是的,我知道。 但我不能在我的變量中添加\(或者我不知道如何用另一個正則表達式來完成) – pl0nk001 2010-01-18 11:08:16
你在說什麼變量?如果你想逃避\,你必須這樣做\ \。 – kjagiello 2010-01-18 11:17:59
他可能意味着URL是動態生成的,他不能手動添加反斜槓,額外的例程需要編碼以逃避編程 – ghostdog74 2010-01-18 11:32:34