【问题标题】:bash error sed: -e expression #1, char 3: unknown command: `/'bash 错误 sed:-e 表达式 #1,字符 3:未知命令:`/'
【发布时间】:2013-07-07 08:28:43
【问题描述】:

我已经编写了这个脚本 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 选项以合并此修改。

请猜一猜? :(

【问题讨论】:

  • 看起来你正在尝试在循环中将文件 IC_masslessPlanetesimal.java 中的第 21 行更改 5 次,首先更改为 9.0E-7,然后更改为 9.0E-8,等等。这绝对是没有意义,所以请告诉我们您真正想要做什么以及一些示例输入和预期输出。
  • @ Ed Morton 这是 bash 的第一部分,所以每次我更改文件时,我都会编译、运行它,通过程序读取它并获取输出。
  • bash 脚本被解释,而不是编译。关键是,虽然我们无法从您迄今为止提供的描述中理解您正在尝试做什么,但发布示例输入和预期输出是帮助我们了解您想要完成的任务的最低要求。跨度>

标签: bash for-loop sed


【解决方案1】:

sed 命令的语法是

[ address(es) ] command

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

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

21s/9\.0E7/$n/

【讨论】:

    【解决方案2】:

    错误在这里:

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

    由于您在21 之后没有提供任何 sed 命令。

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

    应该是这样的:

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

    或者可能是这样的:

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

    【讨论】:

    • 不,这不是错误,因为当我输入 s 时,我收到了以下错误消息 sed: -e expression #1, char 18: unterminated s' 命令`。第 21 行是我必须用字符串“n”更改“9.0e-7”
    • 我怀疑你的 sed 命令现在可能有一些语法错误。
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 2021-06-26
    • 2022-12-28
    • 2019-03-17
    • 1970-01-01
    • 2013-03-08
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多