2012-02-24 33 views
1

我有我需要處理使用BASH腳本,如何根據模式更改線條?

##PAT1## 
#xxxdx 
#ddddvdvc 
##PAT2## 
#dsfcdsfd 
#dsfwf 

我想刪除領先#性格,如果我通過一個圖形樣式的文件。所以如果我通過##PAT1##我想從接下來的2行刪除#(直到下一個模式) - 總是在模式後面2行。我試着用sed沒有成功。

感謝

使用 sed GNU版本
+0

請編輯你上面的消息,以顯示您所期望的輸出。祝你好運。 – shellter 2012-02-24 22:09:17

回答

2

方式一:

內容 infile

"##PAT1##" 
"#xxxdx" 
"#ddddvdvc" 
"##PAT2##" 
"#dsfcdsfd" 
"#dsfwf" 

命令:

sed '/^"##PAT1##"/,+2 s/^\("\)#\([^#]\)/\1\2/' infile 

輸出:

"##PAT1##" 
"xxxdx" 
"ddddvdvc" 
"##PAT2##" 
"#dsfcdsfd" 
"#dsfwf" 
1

這可能會爲你工作:

sed '/^"##PAT1##/{$!N;$!N;s/#//5g}' file 
"##PAT1##" 
"xxxdx" 
"ddddvdvc" 
"##PAT2##" 
"#dsfcdsfd" 
"#dsfwf 
+0

這是什麼'$!N'在做什麼? – Pascal 2012-09-14 12:27:18

+0

@tuner'$!N'表示如果當前行不是文件的最後一行,則將新行和下一行添加到模式空間。 – potong 2012-09-14 20:31:39