2015-04-30 100 views
0

我有一个文件,如下所示。我想删除包含H2H4,H1H6字符的所有行。为了这个目的,我使用了这个命令:grep -v "H1" input.gro > output.gro。但是这个命令也删除了包括H11H10的行。在第10000行之后,它不会删除行。我怎样才能解决我的命令? P.S:我应该保留输出文件中各列之间的间距。删除包含特定单词(字母和数字)的行

XYX C1 1 3.339 0.189 
XYX H11 2 3.376 0.253 
XYX H2 3 3.276 0.260 
XYX H10 4 3.262 0.127 
XYX C1 5 3.443 0.115 
XYX H4 6 3.491 0.193 
XYX H1 7 3.393 0.048 
XYX B3 8 3.552 0.057 
XYX H6 9 3.512 0.026 
... .. . ..... ..... 
XYX H1 9998 3.294 4.293 
XYX H2 9999 3.379 4.287 
XYX H310000 3.377 4.151 
XYX H1110001 0.217 3.143 
XYX N110002 0.299 3.109 
XYX H1010003 0.318 3.022 
XYX C410004 0.277 3.096 

回答

1

破解它的最简单方法是在表达式后面添加空格。要处理多个不同的字符,可以使用表示多个字符中的一个的字符类。

grep -v "H[1246] " input.gro > output.gro 

清洁器的方法来做到这一点是使用字边界这是不太易碎,并允许grep来匹配仅当它形成一个“字”,其中字被定义为字母数字字符的序列和下划线的图案。

grep -v "\bH[1246]\b" input.gro > output.gro 
+0

谢谢。如何通过一个命令删除由H2,H4,H1和H6组成的所有行? – erhan

+0

@erhan,请参阅编辑。 – merlin2011

+0

@erhan,必须有关于导致问题的第1000行的具体内容,或者输入的性质在该行之后更改。你必须确定是什么。 – merlin2011

0

awk是一种非常易读的方法,不需要黑客。

awk '$2!~/H[1246]$/' input.gro > output.gro 
0

grep,至少其中一些人有-w只匹配一个字。所以,你可以做

grep -v -w "H1" input.gro > output.gro 

或全部这些比赛一起

grep -v -w "H[1246]" input.gro > outout.gro 

鉴于你对有问题时,从下一列字符碰上H1列也许你可以试试这个编辑:

egrep -v "^.{7}H[1246]" 

将其固定到行的开头,忽略前7个字符,然后确保您具有您想要的H值之一

相关问题