2016-10-18 54 views
0

我有以下形式的文本文件:更換除註釋第一次出現使用sed的

a = 1 
#b = [2,3] 
c = 4 
d = [5,6] 
e = [7,8] 

我想更換支架(和括號內)與一些內部格局,但忽略評論比賽,最好使用sed。

對於恰好與一個匹配行的文件,我用

sed -i "/^#/!s/\[.*\]/9/" myfile 

怎麼可以這樣修改,如果有更多的僅替換第一場比賽?

回答

0

這是正確的,因爲只是改變了第一次發生。

awk '!end && /^[^#]+ = \[/ {$3="9"; end=1}1' myfile

  • 如果沒有結束標誌和線不會從#和匹配beggining到= [,然後改變在第三列,並設置一個標誌,以防止在接下來的出現次數改變。

a = 1

#b = [2,3]

c = 4

d = 9

e = [7,8] < ---這是你想要的 「E」

+0

值不會改變不是從處理樣品dat一個。 –

+0

它不應該,是嗎?正如作者所說_ _如何修改以取代只有第一個匹配,如果有更多的?_ ?? –

+0

謝謝!這完全按照我在問題中提問的方式執行。但是,如果'='左側有多個字符,則不起作用。任何想法? – user19498

0

這一個班輪應該做的工作:

sed '/^\s*#/!{s/\[[^]]*\]/9/}' file 

,如果你喜歡做的到位的變化添加-i選項。

相關問題