2

我对如何替换分隔符之间的文本进行了一些研究,但由于缺乏对 awk 和 sed 的了解,我无法针对我的问题调整命令。我在这里找到的最相似的问题,但是在调整命令后awk '/^(name=|&)/{f=f?0:1}f&&/*/{$0="//" $0}1' file它不起作用。另外,我想使用变量替换而不是在文件中替换。如果我没有问太多,非常简短的解释会很棒:)

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

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

我需要用 variable 替换 "name=" 和 "&" 之间的文本$new。例如,这$url在之前是可变的:

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

这是可变的$url

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

3 回答 3

3

How about:

$ 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
于 2013-02-04T11:59:01.083 回答
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
> 
于 2013-02-04T12:03:22.820 回答
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
于 2013-02-04T12:12:00.890 回答