2012-02-27 64 views
0

我已經得到了我想要做一個財產替代屬性文件,所以我寫了一個sed圖案改變桑達物業替代

host = 1234 

與另一個值,但是當我執行

echo "host = 1234" | sed 's/\#*\(host[ \t]*\)\=\([ \t]\d*\)/\1\=\1/g' 

我知道替換已完成(host = host),但\ 2原子也附加到字符串的末尾(1234)。我怎樣才能刪除它?

`host =host 1234 
+0

它做什麼你告訴它做的事。你想要做什麼?請提供樣品輸入線和所需的輸出線。 – Sorpigal 2012-02-27 12:33:13

+0

我想要更改主機= 與主機= ,例如可以是\ 1或計算一個。在上面的例子中,newvalue變成了\ 1,其餘的行 – fluca1978 2012-02-27 12:33:43

回答

2

第一個問題是\d不符合您的想法。至少使用[0-9]

你仍然得到host =host了,這對我來說似乎很瘋狂。

編輯:

echo "host = 1234" | sed 's/#*\host[ \t]*=[ \t]*\([0-9]*\)/host = asdf/g' 
  • 爲什麼捕獲 '主機',如果它總是一樣的嗎?只需重寫它。
  • 爲什麼要保留準確的製表符/空間信息?只需重寫它。
  • 爲什麼要逃避不特別的事情?

我希望你明白。

但在這裏,你可能想要的東西:

sed '/^#/!s/[ \t]*\([^ \t]*\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file 

這將在input_file非註釋行更改anything = anythinganything = newvalue。使之成爲特定鍵是由newvalue替換,可使用:

sed '/^#/!s/[ \t]*\(host\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file 

到例如只替換讀取host = anything的行。

+0

謝謝,那正是我想要的。 – fluca1978 2012-02-27 13:18:01

+0

@ fluca1978:如果這回答你的問題並解決你的問題,請接受答案。 – Sorpigal 2012-02-27 19:50:47

0

這是否適合您的需求?

echo "host = 1234" | cut -d"=" -f 1 

產生

host 

然後,

echo "host = 1234" | cut -d"=" -f 1 

產生

1234