【问题标题】:Linux Shell scripting sed commandLinux Shell 脚本 sed 命令
【发布时间】:2015-06-19 05:13:05
【问题描述】:
sed -r -i -e "s/AppId/$a/" -e "s/AccessToken/$b/" FacebookApi > /script/newapp

通过给出这个命令为什么程序没有被执行你能解决这个问题吗?

【问题讨论】:

  • 移除-i或输出重定向> /script/newapp
  • 无论如何我都会试试的,谢谢

标签: bash sed


【解决方案1】:

sed 是一个编辑器,而不是一个 shell 解释器。它执行 SED 指令,例如替代 s///,但不执行批处理或其他形式的二进制(而不是 sed 指令)。执行停留在调用 shell 级别和管理(例如在 sed 接收完整指令之前处理的 sed 指令字符串中双引号之间的变量替换)

【讨论】:

    【解决方案2】:

    命令被执行。正如您指定的-i,它正在就地修改指定的文件(并且不生成任何输出)。

    来自sed 手册页:

    -i extension
    
    Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.  It is not recommended to give a zero-length
    extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.
    

    由于sed直接修改FacebookApi标准输出为空(如文件/script/newapp

    【讨论】:

    • 是的,你是对的,没有得到确切的输出它是空的。那么如何修改它?
    • 实际上我需要将输出存储在一个新文件中
    • 不要使用 -i 选项。如果您指定“就地”,sed 将执行“就地”替换