linux +剪切文件直到具体的单词

时间:2014-03-10 14:52:06

标签: perl sed awk ksh

我的文件格式如下

如何将文件剪切到以2号开头的行(不包括第2行)

在带有数字2的新行之前可以是空格或TAB,

备注 - 可以使用ksh或awk或sed或perl one liner等来实现

文件:

* 0    

 Any text
 Any text
 .
 .

 1

 Any text
 Any text
 .
 .

 2

 Any text
 Any text
 .
 .

 3

 Any text
 Any text
 .
 .

5 个答案:

答案 0 :(得分:2)

您可以使用标志“播放”,该标志会在找到该行时停用:

awk 'BEGIN{f=1} /^2/{f=0} f' file

BEGIN{f=1}将标志初始化为true。当一行以/^2/{f=0}2开头时f取消设置,当为真时,会打印该行。

要在某些空格后检查2行,您可以执行以下操作:

awk 'BEGIN{f=1} /\s*2/{f=0} f' file

答案 1 :(得分:2)

当您遇到想要停在的行时,只需exit

awk '/[[:space:]]*2/{exit}1' file

更新:[[:space:]]将处理空格,标签等。

答案 2 :(得分:2)

使用sed删除匹配行之后的所有内容

$ sed '/^[      ]*2/,$d' input.txt

这是字符类中的空格和制表符。

答案 3 :(得分:1)

Perl one-liner:

perl -pwe 'exit if $_ =~ /^\s*2/' file

这允许行的开头和数字2

之间的任意数量的空格

答案 4 :(得分:0)

使用带有sed的指令Q,一旦找到合适的结束行,它就不会解析文件的其余部分:

sed '/^\s*2/Q' file