我已经写了这个脚本bash,它必须写一个带有不同数字的特定行的文件(例如:"9.0E-8“... )所以我必须有最后一个文件,在for循环之后,"9.0E-11“对应"9.0E-7”。
#!/bin/sh
touch IC_masslessPlanetesimal.java
for n in "9.0E-8" "9.0E-8" "9.0E-9" "9.0E-10" "9.0E-11"
do
sed -i "21s/9\.0E-7/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
done现在,脚本必须重新编辑、编译和运行file.java,代码运行时没有错误。现在的问题是:当我查看第21行的file.java (这是scrpt必须更改的数字)时,scrpt只编辑第一个for-cycle,因为当它再次尝试用其他字符串("9.0E-9“等)替换字符串时。脚本找不到最后一个!
第一个表示步骤) 9e-7 -> 9e-8:脚本查找9e-7并替换为n=9e-8秒表示步骤) 9e-8 -> 9e-9:脚本找不到9e-8字符串,也无法更改它!
所以我必须重写for选项来合并这个修改。
请猜猜看:
发布于 2013-07-10 00:22:36
sed命令的语法为
[ address(es) ] command21被解释为地址,即行号。因此,/被视为命令,因此出现错误。
你想做什么?如果要在第21行将9.0e7替换为$n,请使用
21s/9\.0E7/$n/发布于 2013-07-10 00:20:47
错误在这里:
sed -i "21/9.0E7/$n" 因为您在21之后没有提供任何sed命令。
您是否在sed命令中忘记了s (替换开关)?
它可能应该是:
sed -i "s/9.0E7/$n/" 或者可能是这样的:
sed -i "21s/9.0E7/$n/" https://stackoverflow.com/questions/17553199
复制相似问题