使用BASH脚本,如何根据模式更改行?

时间:2012-02-24 22:01:01

标签: sed design-patterns lines

我有一个我需要处理的文件

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

如果我传递模式模式,我想删除前导#字符。因此,如果我通过##PAT1##我想从接下来的2行中移除#(直到下一个模式) - 在模式之后总是2行。我尝试使用sed但没有成功。

由于

2 个答案:

答案 0 :(得分:2)

使用GNU版sed的一种方式:

infile的内容:

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

命令:

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

输出:

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

答案 1 :(得分:1)

这可能对您有用:

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