我想搜索并替换为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