【问题标题】:Replace a line by the content of another file用另一个文件的内容替换一行
【发布时间】:2013-05-02 03:19:00
【问题描述】:

我有问题。我想用另一个文件的内容替换一个文件的一行。

在我的第一个文件中,我有这一行:"#Content",我想将其替换为文件 content.xml 的内容。

谢谢。

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    这可以工作:

    your_new_text=$(cat content.xml | sed 's/[^-A-Za-z0-9_]/\\&/g')
    sed -i "s/#Content/$your_new_text/" your_file
    

    它将来自content.xml 的文本放入变量$your_new_text。然后 sed 完成工作:-i 代表在文件中替换,查找 #Content 并用 $your_new_text 中的文本替换。

    请注意,它必须用" 包裹才能工作。

    【讨论】:

    • 我有错误sed: 1: "minimize": invalid command code m。我在osx下运行
    • 从我在你的回答中看到的(不过应该在你的问题中),问题是你的 content.xml 文件有一些受保护的字符。使用stackoverflow.com/a/5329148/1983854 信息,我们可以cat content.xml | sed 's/[^-A-Za-z0-9_]/\\&/g' 逃脱它们。
    • 谢谢,但是“换行符”不是转义的。我有这个错误:unescaped newline inside substitute pattern。我测试了new=$(cat $file | sed 's/[^-A-Za-z0-9_]/\\&/g' | sed 's/\n/\\&/g'),但它失败了。
    【解决方案2】:

    这也可以,但不是很有效 - 但对内容不敏感。

    cat <(sed '/#Content/,$d' < FILE ) content.xml <(sed '1,/#Content/d' < FILE) > NEWFILE
    

    所以,连接

    • FILE 的第一部分(直到 #Content -(不包括))
    • 文件`content.xml
    • 文件的第二部分(从到#Content -(不包括))

    【讨论】:

      猜你喜欢
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多