我有一个很大的文本文件,我只想查看其中的一些行。我想要的第一行匹配 regex R
,当该行匹配 regex 时S
,我不关心该行或任何后续行。中间的线不会匹配R
。有没有办法在 bash 命令的命令行上执行此操作,以便我可以在之后将输出传送到某个地方?
答案1
和sed
:
sed -n '/R/,$!d; /S/q; p'
例子:
$ seq 20 | sed -n '/6/,$!d; /1/q; p'
6
7
8
9
答案2
使用 Perl:
# perl -ne 'print if ( /R/ .. /S/ ); last if /S/'
它确实打印了 S-Matching regexp,但是'
答案3
用 awk
awk 'x&&/S/{exit};x+=/R/' file
例子
seq 20 | awk 'x&&/1/{exit};x+=/6/'
6
7
8
9
答案4
我写了一个程序来解决这个问题从到
你可以这样使用它:
cat file | fromto -f R -T S
R
你想要抓取的正则表达式在哪里从,S
是你想要抓取的正则表达式到。它将打印出两者之间的所有行。-f
意思是“包含‘from’行”,-F
意思是“不包含‘from’行”。同样与-t
/ -T
。问题是排除“to”行,因此-T
是该要求的论据。如果你使用-t
它会打印“to”行(但不打印后面的行)