【问题标题】:How to use sed and cat to add multi lines from one file to another如何使用 sed 和 cat 将多行从一个文件添加到另一个文件
【发布时间】:2019-07-21 04:49:03
【问题描述】:

如何使用catsed 从文件中读取数据并将其插入到已知行下的另一个文件中?

例如,我有一个名为 script1.txt 的文件,其中包含几百行,其中一行的值为 "COMMANDS="commands"

如果我想使用sed 在它下面插入一行,我可以使用sed 作为下面的命令。

sed -i '/^COMMANDS=.*/a NEW LINE HERE' script1.txt

但是如果我想在一个文件中插入多行和这些行,并且这些行每隔几个小时就会更改一次.. 我该怎么做?

我试过了:

DATA=$(cat data.txt)

sed -i '/^COMMANDS=.*/a '$DATA'' script1.txt

我得到了下面的错误。

sed: -e expression #1, char 1: unknown command: `"'

除了sed 之外,还有其他方法可以在已知行下插入文件中的数据而没有问题吗?

【问题讨论】:

    标签: bash shell sed cat


    【解决方案1】:

    这可能对你有用(GNU sed):

    sed -i '/^COMMANDS=/r dataFile' file
    

    这将在COMMANDS= 开头的行之后追加文件dataFile 的内容并更新file

    【讨论】:

      【解决方案2】:

      如果您要附加的数据是多行的,您可能需要用\n 替换换行符。

      #!/bin/sh
      DATA="$(awk '{gsub(/[]\/$*.^&[]/, "\\\\&");printf (FNR>1)?"\\n%s":"%s",$0}END{print ""}' data.txt)"
      sed -i -e '/^COMMANDS=.*/a\' -e "$DATA" script1.txt
      

      这里awk 命令转义sed 特殊字符(用于基本正则表达式),然后在第一行打印"%s",为其他行打印"\\n%s"。最后会打印一个换行符,但这有点毫无意义,因为$() 无论如何都会剥离它。

      sed 命令几乎相同,但使用了多个表达式,这相当于一个多行 sed 脚本(a text sed 替代语法在前导空格/反斜杠时可能会出现奇怪的行为)。

      【讨论】:

      • 我稍后会试一试。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多