2012-02-24 30 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