我做了一些关于如何在分隔符之间替换文本的研究,但由于缺乏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
答案 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