“在一个巨大的文件上,猫行x到y行”中的一个小扩展问题:
我有一个巨大的文件(2-3 GB)。我只想从有"foo:“的行到有"goo:”的行打印cat/打印。假设"foo:“和"goo:”只在文件中出现一次;"foo:“收益"goo:”。
到目前为止,这是我的方法:
grep -nr "foo:" bigfile的行123456: foo: hello world!和654321: goo: good bye!tail -n+123456 bigfile | head -n 530865我的问题是,如何用表达式(例如grep .)有效地替换行数常量?
我可以编写一个简单的Python脚本,但我只想使用组合命令来实现它。
发布于 2014-09-02 02:29:11
sed -n '/foo/,/goo/p;/goo/q' <bigfile只会打印那些线条。如果您想要行号,可以添加一个=。
sed -n '/foo/=;/goo/=;//q' <bigfileq很重要,因为当它被调用时,q会使用输入--否则sed会一直读到最后。
如果不想打印foo/goo行,则可以这样做:
使用GNU sed:
sed -n '/foo/,/goo/!d;//!p;/goo/q
' <<\DATA
line1
foo
line3
line4
line5
goo
line7
DATAline3
line4
line5与任何其他人:
sed -n '/foo/G;/\n/,/goo/!d;//q;/\n/!p
' <<\DATA
line1
foo
line3
line4
line5
goo
line7
DATA line3
line4
line5但是,无论哪种方式,当它遇到搜索中的最后一行时,它也会退出它的输入。
发布于 2014-09-02 08:46:11
备选sed one:
sed '/foo/,$!d;/goo/q'https://unix.stackexchange.com/questions/153239
复制相似问题