2010-01-18 108 views
6

我想搜索並替換爲sed,並用變量中的某些內容替換,其中包含一些特殊符號,如&sed with&in變量

比如我做了這樣的事情:

sed "s|http://.*|http://$URL|" 

其中URL=1.1.1.1/login.php?user=admin&pass=password。我認爲這成了一個問題,因爲我在我的變量中使用了?&

我該如何執行搜索和替換?

由於在替代提前

回答

1

?是沒有問題的。 &需要轉義爲\&

+1

是的,我知道。 但我不能在我的變量中添加\(或者我不知道如何用另一個正則表達式來完成) – pl0nk001 2010-01-18 11:08:16

+0

你在說什麼變量?如果你想逃避\,你必須這樣做\ \。 – kjagiello 2010-01-18 11:17:59

+2

他可能意味着URL是動態生成的,他不能手動添加反斜槓,額外的例程需要編碼以逃避編程 – ghostdog74 2010-01-18 11:32:34

1

以下爲我工作(在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 
+0

我認爲OP不能手動添加反斜槓 – ghostdog74 2010-01-18 11:33:30

+0

嗯,我認爲你是對的,但我必須回到這個轉折,它已經越來越遲了 – pavium 2010-01-18 12:26:04

1

用awk

URL="1.1.1.1/login.php?user=admin&pass=password" 
awk -vurl="$URL" '/http:\/\//{ gsub("http://" , "http://"url) }1' file 

但你真的相信你只是想替換http:// ??

+0

awk將一個替換字符串與一個和號與sed一樣。 – 2012-01-20 18:51:27

0
$ 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 
2
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|"