我正在使用这个sed
sed -i "/^### Header$/,/^### [^#]*$/{//!d}"
此sed删除了标题到标题2之间的所有文本。我只想删除第一个匹配范围的文本。
注意我不知道下一个标题的标题是什么!
输入:
### Header
blabla
### Header 2
some text
### Header
blabla
### Header 2
some text
### Header
blabla
### Header 2
some text
输出:
### Header
### Header 2
some text
### Header
blabla
### Header 2
some text
### Header
blabla
### Header 2
some text
2条答案
按热度按时间pgx2nnw81#
使用GNU
sed
zpf6vheq2#
sed是对简单字符串执行s/old/new/的优秀工具,对于其他任何事情,只需使用awk来实现清晰性,可移植性,健壮性,效率等的某种组合。在这种情况下,在每个Unix机器上的任何shell中使用任何awk:
请注意,通过使用标志变量
inRange
,您不必像使用范围运算符(参见Is a /start/,/end/ range expression ever useful in awk?)那样测试范围的开始或结束两次,并且通过使用计数器变量cnt
,您可以轻松地更改代码,以在范围的第2次或第10次或任何其他出现的情况下操作,而不是第一次出现或除了第一次出现之外。sed没有变量。