我需要从评论和空格中删除文件,直到关键字为止。行号有所不同。是否可以根据关键字限制多个继续的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.
答案 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行的注释。