如何删除图案线之间的所有线条

时间:2014-03-18 13:14:26

标签: linux sed awk tcsh

我的文字有以下结构

bla bla more bla bla
$ 
PART  /  4402000LLINK    4401001
NAME ADHESIVE   8.0 mm LLINK Property                                           


        8.                  8.         2
END_PART
$
some other bla bla

但是包含PART的行也可以是:

PART  /  4402000   LLINK 4401001

或:

PART  /  4402000  LLINK  4401001

严格来说,LLINK可以占据16到23列。 现在我想删除图案线之间的所有线条。第一个模式是包含PART和此LLINK的行。第二种模式是包含END_PART的行。所以最后我会有这个:

bla bla more bla bla 
$
$
some other bla bla

我正在使用CentOS:

> echo $SHELL
/bin/tcsh

所以,我可以在tcsh中使用sed或awk,例如你能帮忙吗。谢谢

2 个答案:

答案 0 :(得分:3)

可以使用此sed命令。

sed -i -r '/PART.*LLINK/,/END_PART/d' file

答案 1 :(得分:0)

使用awk,这似乎有效:

$ cat file

bla  PART bla more bla bla
$ 
PART  /  4402000LLINK    4401001
NAME ADHESIVE   8.0 mm LLINK Property                                           
PART

        8.                  8.         2
END_PART
$
some other bla bla
AAAAA
PART  /  4402120   LLINK    4401001
NAME ADHESIVE   8.0 mm LLINK Property
PART
AAAAAAAAAA
        8.                  8.         2
END_PART
$AAAA
AAAAAsome other bla bla

awk '{if (($0!~/PART/ || $0!~/LLINK/) && stop == 0) {print} else {if ($0~/END_PART/) {stop=0} else {stop=1}}}' file

bla  PART bla more bla bla
$ 
$
some other bla bla
AAAAA
$AAAA
AAAAAsome other bla bla

希望这有帮助!