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

「name=」と「&」の間のテキストを変数に置き換える必要があります$new。例:これは前に可変です$url

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

これは次の$url後に変化します:

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

3 に答える 3

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
于 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 に答える