【问题标题】:Unix shell script: Inject text when "text pattern" is foundUnix shell脚本:找到“文本模式”时注入文本
【发布时间】:2013-03-09 04:28:11
【问题描述】:

假设我有两个文件: - 数据.txt - 报告.txt

报告包含带有一些“占位符”的文本,例如:

HPLC results for sample: <insert-sample-id-here>, elements analyzed: <insert-element-name>

数据文件包含一系列“键/值”行:

sampleID: 123456abc
elementName: genericThickeningAgent

这里不是计算机专家,但我知道“查找和替换”的任务可以由计算机自动执行;应该使用什么样的命令来“用我的数据文件中匹配对的值替换占位符后重写report.txt”?

【问题讨论】:

    标签: regex shell unix cat


    【解决方案1】:

    在文件的当前格式中,很难将数据文件中的值与报告文件中的占位符匹配,因为占位符 &lt;insert-sample-id-here&gt; 与 data.txt 中的 sampleID 不同。 &lt;insert-element-name&gt; 不等于 elementName 也是如此。

    但假设您有不同形式的data.txt

    insert-sample-id-here: 123456abc
    insert-element-name: genericThickeningAgent
    

    (所以如果data.txt 中的键与report.txt 中的占位符匹配)你可以使用这个命令:

    $ perl -ne 'print "s/<$1>/$2/g\n" if /^(.*?):\s+(.*)$/' data.txt | \
        xargs -I% perl -p -i -w -e "%" report.txt
    

    这将替换report.txt 中的所有占位符:

    $ cat report.txt
    results for sample: 123456abc, elements analyzed: genericThickeningAgent
    

    【讨论】:

    • 哇,这实际上超出了我的要求!我认为有必要为每一对编写“查找和替换”。我会看看是否可以更改报告模板。非常感谢您的解决方案,太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多