加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 排除第一行和最后一行从sed/START /,/ END /

发布时间:2020-12-15 09:19:53 所属栏目:安全 来源:网络整理
导读:考虑输入: =sec1=some-linesome-other-linefoobar=baz=sec2=c=baz 如果我只想处理= sec1 =我可以例如注释掉该部分: sed -e '/=sec1=/,/=[a-z]*=/s:^:#:' input …好吧,差不多。 这将对包括“= sec1 =”和“= sec2 =”行的行进行注释,结果将是: #=sec1=#
考虑输入:
=sec1=
some-line
some-other-line

foo
bar=baz

=sec2=
c=baz

如果我只想处理= sec1 =我可以例如注释掉该部分:

sed -e '/=sec1=/,/=[a-z]*=/s:^:#:' < input

…好吧,差不多。

这将对包括“= sec1 =”和“= sec2 =”行的行进行注释,结果将是:

#=sec1=
#some-line
#some-other-line
#
#foo
#bar=baz
#
#=sec2=
c=baz

我的问题是:从sed中的/ START /,/ END /范围中排除起始和结束行的最简单的方法是什么?

我知道,对于许多情况下,“s :::”爪的细化可以解决这个特定的情况,但我是在通用解决方案之后。

在“Sed – An Introduction and Tutorial”Bruce Barnett写道:“以后我会告诉你如何限制一个命令,但不包括包含指定模式的行”,但我不能找到他实际显示的地方。

在“USEFUL ONE-LINE SCRIPTS FOR SED”由Eric Pement编译,我只能找到包容性的例子:

# print section of file between two regular expressions (inclusive)
sed -n '/Iowa/,/Montana/p'             # case sensitive
这应该做的诀窍:
sed -e '/=sec1=/,/=sec2=/ { /=sec1=/b; /=sec2=/b; s/^/#/ }' < input

这在sec1和sec2之间匹配,然后使用b命令跳过第一行和最后一行。这将在sec1和sec2(独占)之间留下所需的行,并且s命令添加注释符号。

不幸的是,你需要重复regexp来匹配分隔符。据我所知,没有更好的方法来做到这一点。至少你可以保持regexp干净,即使他们使用了两次。

这是从SED FAQ: How do I address all the lines between RE1 and RE2,excluding the lines themselves?改编

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读