sed命令在另一个带有'not'匹配的字符之前插入一个字符

时间:2015-09-30 14:11:37

标签: regex sed

文件就像:

#comment1 
 some executable code
#comment2
 some executable code

我想在第2行和第4行之前插入两个哈希值,所以我试过, sed's / ^ [^#] / ## / g'但是替换了第一个字符(第二行中的's'),如:

#comment1
##ome executable code
#comment2
##ome executable code

但我希望得到如下输出:

#comment1
##some executable code
#comment2
##some executable code

请建议一些方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

使用sed 's/^[^#]/##&/'

替换部分中的&表示匹配的内容'。

当搜索锚定在行的开头时,不需要g;它只能在给定的行上匹配一次。 OTOH,它实际上并没有造成任何损害。

我注意到输入文件:

#comment1 
 some executable code
#comment2
 some executable code

你原来的输出应该是:

#comment1 
##some executable code
#comment2
##some executable code

因为领先的空间会丢失。使用修订后的脚本,输出将保留前导空格:

#comment1 
## some executable code
#comment2
## some executable code

答案 1 :(得分:0)

由于[^#]匹配某个字符,您需要将其替换为替代字符:

sed 's/^[[:blank:]]*\([^#]\)/##\1/' file
#comment1
##some executable code
#comment2
##some executable code

^[[:blank:]]*在开始时匹配0或空格/制表符。