2013-03-09 100 views
0

。 例如文本文件是:使用bash腳本替換使用bash的數字序列

<Mixture> 1 1.0000 
    <Mean> 39 
     0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
    <Variance> 39 
     1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
    <TransP> 3 

現在我想與一些其它陣列是MATLAB variable.ie我希望它是如下

<Mixture> 1 1.0000 
    <Mean> 39 
     -3.928404e+00 -2.833521e+00 1.418979e+00 -8.560805e+00 -4.987627e+00 -5.422057e+00 -2.148949e+00 -4.035418e+00 1.111476e+00 -4.360466e+00 -2.430894e+00 -3.562756e+00 2.149250e+01 4.148085e-03 3.280356e-01 1.993892e-01 4.226578e-01 3.070029e-01 3.061973e-01 2.200327e-01 2.279716e-01 1.851751e-01 2.630977e-01 2.530313e-01 1.584220e-01 -7.420680e-02 -6.129631e-02 6.845896e-03 1.414505e-02 5.905741e-02 7.828339e-02 6.020883e-02 7.195320e-02 4.838301e-02 4.507983e-02 6.380487e-02 7.884157e-02 6.597416e-02 -1.690722e-02 
    <Variance> 39 
     1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
    <TransP> 3 
+2

你嘗試了什麼,爲什麼它沒有工作?我們不爲您編寫代碼,我們幫助您修復代碼。 – Barmar 2013-03-09 08:45:22

+1

你如何獲得替換號碼? – Barmar 2013-03-09 08:46:18

+0

我已經存儲在matlab變量中,我想要獲取該變量的數據到指定位置的文本文件 – user2151058 2013-03-09 08:51:23

回答

0

假設$matlabvar包含替換零的序列您從Matlab收到的數據:

sed "s/ 0\.0\(0\.0\)*/ $matlabvar/" input.txt > output.txt 

這是正則表達式匹配和替換。

  • s/old/new/ - 替換真實通過與new文本
  • 0old正則表達式匹配的文本 - 匹配0
  • \. - 匹配。
  • \(...\) - 該組包含的元素
  • * - 它匹配0個或更多前面的表達式(分組結構)。

所以它匹配一個0.0後跟任意數量的附加0.0 s。然後用$matlabvar代替。

您可以在regular-expressions.info瞭解關於正則表達式的所有信息。

+0

可以請你解釋它是什麼?特別是s/0 \ .0 \(0 \ .0 \)* – user2151058 2013-03-09 11:37:19

+0

我已經給解答添加了解釋。正則表達式應該是所有程序員都應該學習的基本工具。 – Barmar 2013-03-09 11:46:57

+0

非常感謝您的解釋。但它只是刪除該序列(0.0 0.0 .......)它無法用matlab變量 – user2151058 2013-03-09 12:40:52

0
 <Mean> 39 
      0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
     <Variance> 39 
      1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
<State> 3 
    0.000e+0 1.000e+0 0.000e+0 0.000e+0 0.000e+0 
    0.000e+0 5.000e-1 5.000e-1 0.000e+0 0.000e+0 
    0.000e+0 0.000e+0 5.000e-1 5.000e-1 0.000e+0 
    0.000e+0 0.000e+0 0.000e+0 5.000e-1 5.000e-1 
    0.000e+0 0.000e+0 0.000e+0 0.000e+0 0.000e+0 

這是我的總的文本文件 不幸的是 建議的命令將取代上述矩陣形式也是零,但我不想this.Also另一個問題是如何取代一般序列(我們不知道模式是如何)與另一個一般序列。我認爲應該只通過行號來完成,但另一個問題是我們不知道序列的行數。有什麼辦法嗎?