2013-02-04 86 views
2

我做了一些關於如何替換分隔符之間的文本的研究,但由於缺乏awk和sed的知識,我無法調整我的問題的命令。最相似的問題我發現here,但調整後命令awk '/^(name=|&)/{f=f?0:1}f&&/*/{$0="//" $0}1' file它沒有工作。另外,我想使用變量替換而不是在文件中替換。如果我沒有問得多,很短的解釋將是巨大的:)awk或sed:替換特殊字符(分隔符)之間的文本

我有可變$url和可變$new=unnamed384下一個URL:

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

我需要之間的替換文本「名稱=」和「&」,變量爲$new。 例如這是可變的$url前:

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

這是可變的$url後:

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

回答

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

這正是我一直尋找。謝謝。 – chao

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 
> 
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