【问题标题】:Sed to delete a range of lines from a specific match line TILL a specific match line (not including last line)sed 从特定匹配行中删除一系列行直到特定匹配行(不包括最后一行)
【发布时间】:2012-04-02 04:07:53
【问题描述】:

我通过论坛阅读了如何解决我的问题的线索,但没有一个相关的线程可供我使用,我的编程知识有限,无法应用于我的特定问题。

我的问题是这样的:我需要摆脱在整个文件中聚集但位于可用行簇之间的垃圾行。我搜索了 sed 手册和其他有关删除匹配模式的范围的信息源,但他们只提到删除 UNTIL 匹配模式,而不是 TILL。

现在我想指定一个范围,sed 删除从与模式行匹配的第一行到与另一个模式匹配的行的行。此外,sed 需要识别行尾存在的模式。

例如:

line 1
blah blah 1
blah blah 2
blah blah 3
blah blah 4
line 2
line 3

结果需要是:

line 1
blah blah 1
line 2
line 3

请注意 line 和 line 2 之间的多行。虽然 blah blah 1 需要保留,但其他 3 需要删除。

谢谢!

【问题讨论】:

  • +1 表示格式正确的问题,带有示例输入和所需的输出。祝你好运。

标签: sed range


【解决方案1】:

试试这个

sed -n '/line 1/{;p;n;p;};/line 2/,$p'  sedTest1.txt

#output
line 1
blah blah 1
line 2
line 3

Sed 解构:

 sed -n '/line 1/{;p;n;p;};/line 2/,$p'  sedTest1.txt
     |    |        |        |      |||-> print the range
     |    |        |        |      ||-> til end of file (the '$' char)
     |    |        |        |      |-> range operator (i.e. start,end)
     |    |        |        |-> beginning of range to watch for and print
     |    |        |-> now print line, get 'n'ext, print that line 
     |    |-> match the line with text 'line 1'
     |-> don't print every line, only ones flagged with 'p'

从下往上阅读。

此外,由于您的数据是一个样本,并且您将其称为垃圾行,因此可能没有这么简单。 您需要通读 sed 教程才能跟上进度。

我希望这会有所帮助。

【讨论】:

  • 感谢您与我分享您的想法如何解决我的问题。目前我无法访问我需要测试的服务器,但是一旦我尝试过,我会通知你。干杯,
  • 很高兴有帮助。请您将此标记为已接受吗? (见i.imgur.com/uqJeW.png)。此外,如果您要继续使用 sed,请务必阅读 grymoire.com/Unix/Sed.html 并且要提高您的文本处理技能,请使用 awk,grymoire.com/Unix/Awk.html。祝你好运!
【解决方案2】:

这可能对你有用:

sed '/line 1/,/line 2/{//!d;/line 1/N}' file
line 1
blah blah 1
line 2
line 3

或者这个(如果范围不连续):

sed '/line 1/,/line 2/{//!d;$!N}' file
line 1
blah blah 1
line 2
line 3

【讨论】:

    【解决方案3】:
    $ sed -n '/line 1/{p;n;p;:a;n;/line 2/{:c;p;n;bc};ba};p' input.txt
    line 1
    blah blah 1
    line 2
    line 3
    

    【讨论】:

    • 感谢您与我分享您的想法。我目前无法访问我的服务器以检查这是否有效,但我会回复您。干杯
    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2013-03-04
    • 1970-01-01
    • 2014-08-19
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    相关资源
    最近更新 更多