如何让Octave更改输入文件中的变量?

时间:2015-05-01 18:37:56

标签: sed octave

我试图让Octave在输入文件中更改变量,就像我在Ubuntu中使用命令行一样。我已经把这个简单地解决了一个简单的例子,我把它改为'1111'到字符串Naer_str,'2222'改为字符串sigma_str;将结果打印到新文件。 1111和2222都存在于第一个文件中。这是我在下面运行的整个代码。

 Naer_str= num2str(1000)

 disp(Naer_str)

 sigma_str = num2str(0.491)

 eval(['system(''sed -e "s~1111~${Naer_str}~; s~2222~${sigma_str}~;" OctaveChangeVarTestFile.IN > OctaveChangeVarTestFile_out.IN'');']);

创建新的输入文件,但不是看到值1000和0.491,因为我预期0.491和1000应该是空白的地方。在调试模式下运行它显示了以下错误消息(自从我几天前开始使用Octave以来,我已经看过很多,但我仍然没有真正理解它的含义)。

 error: invalid use of script in index expression

我尝试过将内容输入Linux终端,如下所示:

 Naer_str=1000
sigma_Str=0.491
 sed -e "s/1111/${Naer_str}/; s/2222/${sigma_str}/;" OctaveChangeVarTestFile.IN > OctaveChangeVarTestFile_out.IN

这似乎工作正常,所以我假设我必须使用system或eval发出语法错误,但我看不到它。

导致此错误消息的原因是什么?为什么我没有看到我预期的输出?

2 个答案:

答案 0 :(得分:8)

我不知道你为什么特别得到这个错误,但我90%肯定这不会做你想要的:

eval(['system(''sed -e "s~1111~${Naer_str}~; s~2222~${sigma_str}~;" OctaveChangeVarTestFile.IN > OctaveChangeVarTestFile_out.IN'');']);

在bash中,双引号字符串中的${Naer_str}variable substitution:它在传递之前将${Naer_str}替换为字符串中Naer_str变量的值它跟命令一样。因此,seds/1111/1000/;作为其命令之一。

但我在八度音阶VariablesManipulating StringsStrings或其他地方找不到对此类功能的引用。这些字符只会被视为文字字符。因此,seds~1000~${Naer_str}~;作为参数,这意味着它将生成垃圾脚本。看起来像你在八度音程中做这种事情的方式是使用printf样式的格式化(如操作字符串页面所描述的那样)。

答案 1 :(得分:3)

  1. 看起来你所拥有的只是一个带有计算命令的system调用。您可以将计算结果作为system()的参数传递,您不需要,也不应在此使用eval()

  2. 以八度为单位连接字符串(字符数组)的方法只是水平矩阵连接。因此,代替's~1111~${Naer_str}~'(由abarnert指出,由没有八度变量概念的shell进行插值),您可以编写['s~1111~' Naer_str]并且八度音将连接。

  3. 您无需通过sed通过system()到达外部八度音程以进行文字替换。 strrepregexprep可以在八度音程(或Matlab)内的字符数组上进行替换。