获取两行之间的指定内容

时间:2014-05-07 11:03:13

标签: linux sed

我有一个表格的文件t.txt:

abc 0
file content1
file content2
abc 1
file content3
file content4
abc 2
file content5
file content6

现在我想保留abc 1和abc 2之间的所有内容,即我想保留:

file content3
file content4

为此,我使用sed:

sed -e "/abc\s4/, /abc\s5/ p" t.txt > j.txt

但是当我这样做时,我将j.txt作为t.txt的副本。我不知道我在哪里弄错了..有人请帮忙

1 个答案:

答案 0 :(得分:2)

您可以使用此sed

$ sed -n '/abc 1/,/abc 2/{/abc 1/d; /abc 2/d; p}' file
file content3
file content4

解释

  • /abc 1/,/abc 2/从包含abc 1的行到包含abc 2的行的范围。也可以/^abc 1$/匹配完整的字符串。
  • p打印线条。因此,例如sed -n '/file/p' file将打印包含字符串file
  • 的所有行
  • d删除这些行。

'/abc 1/,/abc 2/p'就会打印abc 1abc 2行:

$ sed -n '/abc 1/,/abc 2/p' file
abc 1
file content3
file content4
abc 2

因此,您必须使用{/abc 1/d; /abc 2/d;}明确删除它们,然后使用p打印其余内容。


使用awk

$ awk '$0=="abc 2" {f=0} f; $0=="abc 1" {f=1}' file
file content3
file content4

每当找到f时触发标记abc 1,并在找到abc 2时取消触发标记f。仅{{1}}就是真的,因此打印出来。