我有一个表格的文件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的副本。我不知道我在哪里弄错了..有人请帮忙
答案 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 1
和abc 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}}就是真的,因此打印出来。