2016-05-04 41 views
0

我有一個文本文件,它看起來像這樣:就地查找和替換用線(Linux)的

>ID1_ID2 other_stuff 
more_other_stuff 
>ID3_ID4 other_stuff 
more_other_stuff 

我想變成這樣:

>ID1_ID2;label=ID1 other_stuff 
more_other_stuff 
>ID3_ID4;label=ID3 other_stuff 
more_other_stuff 

那對於以>開頭的每一行,加上;label=ID(位於特定位置),其中ID>和第一個下劃線之間的數字。所有的ID都是整數。

我可以在Python中弄清楚這一點,但是有沒有簡單的方法可以用sedawk或其他Unix命令行工具就地執行此操作?

回答

1

隨着GNU sed中您可以使用此:

sed -r 's/^>(([0-9]+)_([0-9]+))(.*)/\1;label=\2\4/' yourfile 

如果一切正常,你可以添加選項-i,bak

它匹配

  • 一個符合>^>)說明接着兩個序列數字
  • _分離
  • (([0-9]+)_([0-9]+))
    • 整個序列被捕獲到\1
    • 每個數字都被捕獲到\2\3
    • 行((.*))的其餘部分被捕獲到\4
  • 更換利用捕獲的值來獲取你想要的
+0

太棒了。謝謝。看着它,我甚至可以知道它在做什麼! –

0

隨着GNU sed的:

$ sed -r 's/>([^_]+)\S+/&;label=\1/' file 
>ID1_ID2;label=ID1 other_stuff 
more_other_stuff 
>ID3_ID4;label=ID3 other_stuff 
more_other_stuff 

添加-i標誌,一旦你測試了它。