gpt4 book ai didi

regex - 使用 sed 删除两个匹配模式之间的所有行

转载 作者:行者123 更新时间:2023-12-02 05:14:00 24 4
gpt4 key购买 nike

我有一个类似的文件:

# ID 1
blah blah
blah blah
$ description 1
blah blah
# ID 2
blah
$ description 2
blah blah
blah blah

如何使用 sed 命令删除 #$ 行之间的所有行?所以结果会变成:

# ID 1
$ description 1
blah blah
# ID 2
$ description 2
blah blah
blah blah

您能解释一下吗?

最佳答案

使用此 sed 命令来实现:

sed '/^#/,/^\$/{/^#/!{/^\$/!d}}' file.txt

Mac 用户(为了防止d 命令末尾出现额外字符错误)需要在右括号前添加分号

sed '/^#/,/^\$/{/^#/!{/^\$/!d;};}' file.txt

输出

# ID 1
$ description 1
blah blah
# ID 2
$ description 2
blah blah
blah blah

说明:

  • /^#/,/^\$/ 将匹配以 # 开头的行与以 $ 开头的行之间的所有文本。 ^ 用于行字符的开头。 $ 是一个特殊字符,需要转义。
  • /^#/! 表示如果行首不是 #
  • 则执行以下操作
  • /^$/! 表示如果行首不是 $
  • 则执行以下操作
  • d 表示删除

所以总的来说,它首先匹配从 ^#^\$ 的所有行,然后从这些匹配的行中查找不匹配的行 ^#不匹配 ^\$ 并使用 d 删除它们。

关于regex - 使用 sed 删除两个匹配模式之间的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com