sed删除#和;从文件到某些关键字的评论

时间:2018-04-28 18:33:52

标签: bash sed

我需要从评论和空格中删除文件,直到关键字为止。行号有所不同。是否可以根据关键字限制多个继续的sed替换?

这将删除文件中的所有注释和空格:

sed -i -e 's/#.*$//' -e 's/;.*$//' -e '/^$/d' file

例如:

# string1 
# string2
some string
; string3

; string4
####

<Keyword_Keep_this_line_and_comments_white_space_after_this>
# More comments that need to be here

; etc.

3 个答案:

答案 0 :(得分:1)

我建议您在到达关键字时使用awk并设置标记:

awk '/Keyword/ { stop = 1 } stop || !/^[[:blank:]]*([;#]|$)/' file

当该行包含stop时,将Keyword设置为true。当stop为真或行与正则表达式不匹配时,执行默认操作(打印行)。正则表达式匹配第一个非空白字符是分号或散列或空行的行。它与你的情况略有不同,但我认为它符合你的要求。

该命令打印到标准输出,因此您应该重定向到新文件,然后覆盖原始文件以实现&#34;就地编辑&#34;:

awk '...' input > tmp && mv tmp input

答案 1 :(得分:1)

sed -i '1,/keyword/{/^[#;]/d;/^$/d;}' file

答案 2 :(得分:0)

使用grep -n keyword获取包含关键字的行号。

当N是包含关键字的行号时,使用sed -i -e '1,N s/#...仅删除第1行到第N行的注释。