2010-01-18 120 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|"