2015-04-30 101 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值之一

相關問題