2009-11-24 23 views
2

我想在sed命令的輸出部分使用搜索模式。例如,考慮下面的sed命令:sed:在輸出中使用搜索模式

sed '/HOSTNAME=/cHOSTNAME=fred' /etc/sysconfig/network 

我想引用這些搜索的一些轉義序列來代替「主機名=」的第二個實例。事情是這樣的:

# this doesn't actually work 
sed '/HOSTNAME=/c\?=fred' /etc/sysconfig/network 

是否anywone知道是否有辦法做到這一點還是我要重複的答案搜索詞。

我知道我可以做這樣的事情:

sed 's/\(HOSTNAME=\)/\1fred/' /etc/sysconfig/network 

但是,這是我想要什麼微妙的不同 - 例如#HOSTNAME =祖格會變成#HOSTNAME =弗雷德,但我不想要領先的「#」。第一個sed示例處理這種情況。

回答

2

嘗試這些:

sed 's/.*\(HOSTNAME=\)/\1fred/' /etc/sysconfig/network 

或者

sed 's/.*\(HOSTNAME=\).*/\1fred/' /etc/sysconfig/network 
+0

雖然第二種形式確實做我想做的 - 我仍然希望能找到一種方法,重複模式空間輸出 - 希望使用'c'命令而不是's'命令,如問題所示。 但是,如果沒有其他答案,那麼這將是被接受的答案。 – JohnnyLambada 2009-11-24 21:01:27

+0

您可以將匹配從's'命令移至地址,但在這種簡單情況下這不是必需的。這是它的樣子:'sed'/.*\(HOSTNAME=\).*/ s // \ 1fred /'/ etc/sysconfig/network''''''''''''''''''''''''' \'只能使用文本文本,它們不會做任何*替換* - 這就是///'命令的用途。 – 2009-11-24 21:30:28

+0

好的,夠好 - 謝謝! – JohnnyLambada 2009-11-25 20:11:13