Awk或Sed:替换特殊字符之间的文本(分隔符)

时间:2013-02-04 11:52:27

标签: bash scripting sed awk

我做了一些关于如何在分隔符之间替换文本的研究,但由于缺乏awk和sed的知识,我无法调整我的问题的命令。我发现here最相似的问题,但在将命令调整为awk '/^(name=|&)/{f=f?0:1}f&&/*/{$0="//" $0}1' file后,它无法正常工作。另外,我想用变量替换而不是在文件中替换。如果我没有多问,那么非常简短的解释会很棒:)

我在变量$url和变量$new=unnamed384中有下一个网址:

http://www.example.com/?name=unnamed293&file=4

我需要在“name =”和“&”之间替换文字变量$new。 例如。这之前是变量$url

http://www.example.com/?name=unnamed293&file=4

这是变量$url之后:

http://www.example.com/?name=unnamed384&file=4

3 个答案:

答案 0 :(得分:3)

怎么样:

$ new="unnamed384"

$ url="http://www.example.com/?name=unnamed293&file=4"

$ sed "s/name=[^&]*/name=$new/" <<< $url
http://www.example.com/?name=unnamed384&file=4

答案 1 :(得分:1)

s/(.*\?name=)[^\&]*(&.*)/$1$n$2/g

以上都可以。 以下测试(与perl一起使用)

> echo "http://www.example.com/?name=unnamed293&file=4"
http://www.example.com/?name=unnamed293&file=4
> echo "http://www.example.com/?name=unnamed293&file=4" | perl -lne '$n="unamed394";$_=~s/(.*\?name=)[^\&]*(&.*)/$1$n$2/g;print'
http://www.example.com/?name=unamed394&file=4
> 

答案 2 :(得分:0)

$new='unnamed384'; 
$echo 'http://www.example.com/?name=unnamed293&file=4' | awk -F'[=&]' '{ print $1"=""'"$new"'""&"$3"="$4 }'
http://www.example.com/?name=unnamed384&file=4