1

我已经编写了这个脚本 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 循环,因为当它尝试再次替换其他字符串时一个(“9.0E-9”等......)脚本找不到最后一个!

第一个步骤)9e-7 -> 9e-8:脚本找到 9e-7 并替换为 n=9e-8 第二个步骤)9e-8 -> 9e-9:脚本找不到 9e-8 字符串和改不了!!!

所以我必须重写 for 选项来合并这个修改。

请问有什么猜的吗?:(

4

2 回答 2

2

错误在这里:

sed -i "21/9.0E7/$n" 

由于您在21.

您是否在 sed 命令中忘记了s(替换开关)?

应该是:

sed -i "s/9.0E7/$n/" 

或者可能是这样的:

sed -i "21s/9.0E7/$n/" 
于 2013-07-09T16:20:46.703 回答
2

sed命令的语法是

[ address(es) ] command

21 被解释为地址,即行号。/因此被视为命令,因此错误。

你想做什么?如果要在第 21 行将 9.0e7 替换为 $n,请使用

21s/9\.0E7/$n/
于 2013-07-09T16:22:36.333 回答