我真的尝试过搜索,但找不到任何东西(很难知道到底要搜索什么)。
我知道如何做到这一点sed
:从当前行打印直到匹配某些内容的行:
sed -n '/1/,/SOMETHING/p'
但是我该如何做同样的事情,但从当前行打印到才不是匹配某些东西?
例如通过管道将其输入sed
:
blah blah SOMETHING blah blah
blah blah SOMETHINGblahblahblah
SOMETHING blah blah
NO MATCH HERE
然后我想过滤掉并仅打印前 3 行(但“3”可能会有所不同)。
答案1
这可能不像您真正想要的那么普遍,但这是一个起点:
sed -n '/SOMETHING/!q;p'
这表示:检查与 的匹配/SOMETHING/
。如果线不匹配(用于!
反转测试结果),然后退出。否则,打印此行并继续下一行。
这不够灵活,无法立即允许您执行您要求的操作以及对文件的其他操作,所有这些都在同一个sed
命令中。
答案2
您可以尝试循环sed
:
$ sed -n '{:loop p; n; /SOMETHING/b loop; q}' test.txt
blah blah SOMETHING blah blah
blah blah SOMETHINGblahblahblah
SOMETHING blah blah
这:
:loop
创建一个名为loop
p
打印当前行n
获取下一行/SOMETHING/b loop
loop
如果行匹配则分支/SOMETHING/
q
如果分支没有发生。
无论如何,这都会打印一行。 (也许可以通过 G-Man 的回答来解决。)
改编自这个问题。