【问题标题】:How to append data at a particular line in a file using sed , where data is from another file如何使用 sed 在文件中的特定行附加数据,其中数据来自另一个文件
【发布时间】:2021-06-08 02:52:40
【问题描述】:

假设我有一个包含一些数据的配置文件,例如 file1.config ,其内容是:

flag_data_to_be_appended=xyz

我还有另一个文件,它是一个 shell 脚本,例如 file2.sh ,其内容是:

./file.config
flag=abc
echo $flag

现在我需要在 flag 处将 file1 中的信息附加到 file2,即 flag 的输出必须如下所示:

flag=abc xyz

如何在“sed”命令的帮助下做到这一点?

【问题讨论】:

  • 想要的结果不是有效的 shell 脚本。如果这只是一个配置文件,那当然是没有意义的。但是,如果您在 shell 中评估该文件,它将在尝试将xyz 作为命令运行期间临时分配flag=abc。如果要将整个字符串分配给 flag,则需要转义空格或引用字符串。

标签: sed


【解决方案1】:

为什么不让sed 编写自己的脚本?

sed -e "$(sed -e 's|^\(.*\)_data_to_be_appended=\(.*\)|/^\1=.*/ s//\& \2/|' cfg)" script

内部命令读取配置文件并发出/^flag=.*/ s//& xyz/ 然后将其应用于脚本文件。

输出:

./file.config
flag=abc xyz
echo $flag

两个转义括号对将键和值捕获为\1\2。 在s//& \2/ 中,// 是与最后一个匹配的空正则表达式 使用正则表达式(在/^…/)并替换整个匹配(&) 通过捕获的值。

【讨论】:

    【解决方案2】:

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

    sed '/^flag=/s#.*#sed "s/.*=/& /" file1#e' file2
    

    匹配 file2 中以 flag= 开头的行,并通过在替换的 RHS 中应用第二次 sed 调用,将其内容替换为 = 符号之后的单例行内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 2014-02-16
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多