我有一个 sed 命令,它将成功打印匹配两种模式的行:
sed -n '/PAGE 2/,/\x0c/p' filename.txt
我没有想到的是,我希望它打印从第一个标记到第二个标记的所有行。\x0c
令牌是一个大平面文件上的记录分隔符,我需要保持那行完整 。
在这两个令牌之间,数据是完全可变的,我没有可靠的锚点可以使用。
[澄清] 现在它打印所有之间的行/PAGE 2/
和/\x0c/
包括在内的所有行。我希望它打印/PAGE 2/
到记录中的下一个/\x0c/
。
[测试数据]/x0c
将在该记录的第一行开头和最后一行开头。
我需要删除记录的第一行,通过下一条记录开始之前的行。
^L20-SEP-2006 01:54:08 PM Foobars College PAGE 2
TERM: 200610 Student Billing Statement SUMDATA
99999
Foo bar R0000000
999 Geese Rural Drive DUE: 15-OCT-2012
Columbus, NE 90210
--------------------------------------------------------------------------------
Balance equal to or greater than $5000.00 $200.00
Billing inquiries may be directed to 444/555-1212 or by
email to bursar@foobar.edu. Financial Aid inquiries should
be directed to 444/555-1212 or finaid@foobar.edu.
^L20-SEP-2006 01:54:08 PM Foobars College PAGE 1
[预期结果]
^L20-SEP-2006 01:54:08 PM Foobars College PAGE 1
文件中会有多条这样的记录。我只能依靠/PAGE 2/
令牌和/x0c/
令牌。
[解决方案]:
在 Choruba 的带领下,我将他的命令编辑为:
sed '/PAGE [2-9]/,/\x0c/{/\x0c$/!d}'
大括号中的规则将自身应用于任何包含 a 的行^L
,并选择性地忽略它们。