使用bash脚本替换使用bash的数字序列
。 例如文本文件是:使用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
假设$matlabvar
包含替换零的序列您从Matlab收到的数据:
sed "s/ 0\.0\(0\.0\)*/ $matlabvar/" input.txt > output.txt
这是正则表达式匹配和替换。
-
s/old/new/
- 替换真实通过与new
文本 -
0
的old
正则表达式匹配的文本 - 匹配0 -
\.
- 匹配。 -
\(...\)
- 该组包含的元素 -
*
- 它匹配0个或更多前面的表达式(分组结构)。
所以它匹配一个0.0
后跟任意数量的附加0.0
s。然后用$matlabvar
代替。
您可以在regular-expressions.info了解关于正则表达式的所有信息。
可以请你解释它是什么?特别是s/0 \ .0 \(0 \ .0 \)* – user2151058 2013-03-09 11:37:19
我已经给解答添加了解释。正则表达式应该是所有程序员都应该学习的基本工具。 – Barmar 2013-03-09 11:46:57
非常感谢您的解释。但它只是删除该序列(0.0 0.0 .......)它无法用matlab变量 – user2151058 2013-03-09 12:40:52
<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另一个问题是如何取代一般序列(我们不知道模式是如何)与另一个一般序列。我认为应该只通过行号来完成,但另一个问题是我们不知道序列的行数。有什么办法吗?
你尝试了什么,为什么它没有工作?我们不为您编写代码,我们帮助您修复代码。 – Barmar 2013-03-09 08:45:22
你如何获得替换号码? – Barmar 2013-03-09 08:46:18
我已经存储在matlab变量中,我想要获取该变量的数据到指定位置的文本文件 – user2151058 2013-03-09 08:51:23