我不是bash编码专家,我想做一个类似于交互的代码来帮助我的工作。
我有一个文件,其中包含一些数字(坐标),我试图使代码从文件中读取一些特定的数字,然后将它们存储在一个数组中。使用一些算术运算修改该数组,然后用修改后的数组替换原始文件中的数字。到目前为止,除了替换文件中的数字外,我已经完成了所有操作,我尝试使用sed但它不会改变文件. 原始数字存储在一个名为"readfile"的数组中。新的数字存储在一个名为"d"的数组中。
我试图以这种方式使用sed:sed -i 's/${readfile[$j]}/${d[$k]}/' file.txt
我循环j和k以覆盖数组中的所有数字。一切似乎工作,但文件没有被修改。经过一番挖掘,我注意到sed没有读取数组的值,但我不知道如何修复这个问题。
谢谢你的帮助。
当一个文件没有被sed -i
修改时,意味着sed
没有找到任何匹配项来修改。你的图案是错的。
在使用"
而不是'
以便变量可以在字符串中实际求值之后,查看readfile
数组的内容并检查它是否实际上与文本匹配。如果匹配,则在模式中查找特殊字符,这些字符可能表示特定于sed
的内容(最常见的错误是/
,这会干扰搜索命令)。
特殊字符的修复方法是:(1)转义它们,例如/
而不仅仅是/
,或者(2)(特别是/
)使用另一个分隔符来搜索/替换命令(而不是s/foo/bar/
,您可以使用s|foo|bar|
或s,foo,bar,
等-几乎任何分隔符都可以工作,所以您可以选择一个您知道不在模式字符串中)。
如果你发布数据样本和更多的脚本,我们可以看看你哪里出错了。