如何在文件开头显示数据直到第一次出现正则表达式?

Pet*_*ete 8 regex perl awk sed

如何在文件开头显示数据直到第一次出现正则表达式?

例如,如果我有一个包含以下内容的文件:

One
Two
Three
Bravo
Four 
Five
Run Code Online (Sandbox Code Playgroud)

我想开始显示从第1行开始的文件内容,并在找到字符串"B*"时停止.所以输出应该如下所示:

One
Two
Three
Run Code Online (Sandbox Code Playgroud)

rjh*_*rjh 11

perl -pe 'last if /^B/' source.txt

解释:-p开关在代码周围添加一个循环,将其转换为:

while ( <> ) {
    last if /^B.*/;  # The bit we provide
    print;
}

如果条件成立,则最后一个关键字立即退出周围的循环 - 在这种情况下,/ ^ B /,表示该行以B开头.


gho*_*g74 7

如果它从文件的开头

awk '/^B/{exit}1' file
Run Code Online (Sandbox Code Playgroud)

如果你想从特定的行号开始

awk '/^B/{exit}NR>=10' file # start from line 10
Run Code Online (Sandbox Code Playgroud)


dra*_*tun 6

sed -n '1,/^B/p'
Run Code Online (Sandbox Code Playgroud)

从第1行打印到/ ^ B /(含). -n抑制默认回声.


更新: Opps ....不想要"Bravo",所以需要反向行动;-)

sed -n '/^B/,$!p'  
Run Code Online (Sandbox Code Playgroud)

/ I3az /


ndi*_*dim 5

sed '/^B/,$d'
Run Code Online (Sandbox Code Playgroud)

阅读如下:删除(d)以第一行开头的所有行,以"B"(/^B/)开头,向上,直到最后一行($).


cat*_*alk 2

在 Perl 中:

perl -nle '/B.*/ && last; print; ' source.txt
Run Code Online (Sandbox Code Playgroud)