2014-11-05 27 views
0

定義的位置通過搜索,並試圖(無正則表達式的專家),我已成功地處理使用SED或grep的文本輸出,並提取了一些線條,格式化這種方式,所有的文本列:sed的:動態刪除除通過圖案

Tree number 280: 
1   0.500  1  node_15 6 --> H 1551.code 
        1  node_21 S ==> H node_20 
Tree number 281: 
1   0.500  1  node_16 S ==> M 1551.code 
        1  node_20 S --> H node_19 

然後,使用

sed 's/^.\{35\}\(.\{9\}\).*/\1/' infile,我得到想要的部分,加上一些輸出,我得到後來去掉(不是問題)。

Tree number 280: 
6 --> H 
S ==> H 
Tree number 281: 
S ==> M 
S --> H 

然而,C --> C圖案的水平位置可以從文件到文件而改變,儘管它總是對準。有沒有辦法提取包含單個前後字符的-->==>,無論它們在哪個列中找到?

Tree number #部分不是必需的,也可以留空,但必須有一種分隔符。

UPDATE(另一種方法)

試圖用grep,我發出

grep -Eo '(([a-zA-Z0-9] -- |[a-zA-Z0-9] ==)> [a-zA-Z0-9]|Changes)' infile

我的初始文件樣本如下,如果有人認爲更好,更有效的方法,或我的正則表達式的使用是瘋了,請評論!

..MISC TEXT... 

Character change lists: 


Character CI Steps     Changes 
---------------------------------------------------------------- 
1   0.000  1   node_235 H --> S node 
        1   node_123 S ==> 6 1843 
        1   node_126 S ==> H 2461 
        1   node_132 S ==> 6 1863 
        1   node_213 H --> I 1816 
        1   node_213 H --> 8 1820 
..CT... 

Character change lists: 

Character CI Steps     Changes 
---------------------------------------------------------------- 
1   0.000  1   node_165 H --> S node 
        1   node_123 S ==> 6 1843 
        1   node_231 H ==> S 1823 
..MISC TEXT... 
+0

做得好,因爲首先發生變化,它會給你一個列標題,正則表達式限制爲字母和數字,如果你想簡化一點,你可以說大寫或小寫字母的[a-Z]。 – 2014-11-05 13:08:19

+1

grep -Eo'(([a-Z0-9] - | [a-Z0-9] ==)> [a-Z0-9] |變更)'infile – 2014-11-05 13:15:31

回答

1

grep的是剛剛提取匹配的正則表達式(如果你需要不同的分隔符,你可以將它們添加到通過管道分離的列表更容易一點[ - | =]

grep -o '. [-|=][-|=]> .' infile

如果你真的想sed爲此,這應該做的第一部分只匹配具有該模式的行,第二部分只提取匹配的正則表達式

sed -n '/[--|==]>/{s/.*\(. [=|-][-|=]> .\).*/\1/p}' infile

+0

非常好,兩者的工作完全一樣。首先使用sed的原因是使用-i開關修改相同文件的方便性。不過,這可能不值得,因爲我也可以使用grep手動執行此操作。 – simplygades 2014-11-05 07:37:56

+0

-i開關有時可用於sed但有時(如果其他人必須閱讀它),它有必要進行邏輯視覺簡化,而不是簡單的單線加sed使用中間文件實現-i開關所以在內部你是在大致相同的複雜性和性能做類似grep語句< file > $$ && mv $$文件 – 2014-11-05 07:56:07

+0

事實上,我只是想避免多行,因爲命令從R中調用,以便預處理文件。另一種選擇是將其作爲純文本輸入到R中,並使用其功能進行操作。 – simplygades 2014-11-05 08:11:27