基于正则表达式提取文件行的​​子集第一行和最后一行

基于正则表达式提取文件行的​​子集第一行和最后一行

我有一个很大的文本文件,我只想查看其中的一些行。我想要的第一行匹配 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”行(但不打印后面的行)

相关内容