【问题标题】:Filter a text from a specific file and append the output to another file Linux从特定文件中过滤文本并将输出附加到另一个文件 Linux
【发布时间】:2021-03-19 08:35:45
【问题描述】:

我正在尝试使用 grep 命令将文件中的文本附加到 Linux 中的另一个文件。

我有一个名为“temp1buildVersion.properties”的文件,其中包含数据
喜欢

Project version: 1.0.5

另外,我还有另一个名为 buildversion.properties 的文件,其中包含数据

VERSION_BUILD=

我想在“项目版本:”之后从 temp1buildVersion.properties 中获取内容并将其附加到名为“buildversion.properties”的现有文件中

因此 buildversion.properties 的输出将是

VERSION_BUILD=1.0.5

目前,我正在使用 grep 命令获取数据并将输出附加到文件“buildversion.properties”

grep 'Project version: ' /tmp/tempbuildVersion.properties | cut -d\   -f3  >> /tmp/buildversion.properties

它有两行我如何附加到同一行/或特定行?

VERSION_BUILD =
1.0.5

【问题讨论】:

    标签: linux bash awk sed grep


    【解决方案1】:

    你可以使用这个awk:

    awk -F ': ' 'FNR==NR {ver=$2; next} /^VERSION_BUILD=/ {print $0 ver}' temp1buildVersion.properties buildversion.properties > _tmp && mv _tmp buildversion.properties
    
    VERSION_BUILD=1.0.5
    

    【讨论】:

    • 感谢您的回复,有什么方法可以附加到 buildversion.properties 文件本身。目前它在控制台中打印值。
    【解决方案2】:

    另一种选择是使用sed 附加到行尾,例如

    sed "/VERSION_BUILD/s/\$/$(grep 'Project version: ' /tmp/tempbuildVersion.properties | cut -d\   -f3)/" buildversion.properties
    

    您的命令上方只是作为sed "/VERSION_BUILD/s/\$/$(your_cmd)/" file 中的命令替代品。您可以添加 sed -i 来更新文件。

    您可以通过简单地使用awk隔离版本号并稍微缩短命令来消除管道和cut,例如

    sed "/VERSION_BUILD/s/\$/$(awk '/^Project version:/{printf "%s", $NF; exit}' /tmp/tempbuildVersion.properties)/" buildversion.properties
    

    【讨论】:

    • 很高兴为您提供帮助,祝您的脚本编写顺利!
    【解决方案3】:

    如果ed 可用/可接受。

    printf '%s\n' 'r temp1buildVersion.properties' 's/^Project version: //' '1,$j' ,p Q | ed -s buildversion.properties
    

    如果您对输出没问题并编辑文件buildversion.properties,请将Q 更改为w

    脚本。

    #!/usr/bin/env bash
    
    ed -s "$1" <<-EOF
      r $2
      s/^Project version: //
      1,\$j
      ,p
      Q
    EOF
    

    您可以将文件作为参数执行。

    ./myscript buildversion.properties temp1buildVersion.properties
    

    【讨论】:

      【解决方案4】:

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

      sed -i '/VERSION_BUILD=/{x;s/.*/cat fileVersion/e;x;G;s/\n.*:\s*//}' fileBuild
      

      处理构建文件,直到匹配到 VERSION_BUILD= 行。

      切换到保持空间并插入版本文件行。

      将版本文件中的行附加到当前行并使用模式匹配将该行操作为所需的格式。

      【讨论】:

        猜你喜欢
        • 2014-02-26
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        • 2011-07-24
        相关资源
        最近更新 更多