一个实用程序,用于将内容附加到文件中,如果该内容尚不存在于文件中(即使是部分内容)

一个实用程序,用于将内容附加到文件中,如果该内容尚不存在于文件中(即使是部分内容)

有没有*尼克斯公用事业通过它,我可以将内容附加到文件(例如,将模板文件的内容附加到第二个文件的末尾),前提是第二个文件中的内容尚未部分或全部可用?

一个可以使用grep 解决方案,但我发现那里的代码目前有点复杂,如果有的话,我更喜欢一个专用的实用程序。

答案1

假设您希望仅template在.datatemplatedata

template测试是否在中找到一行的命令data

grep -xF -f template data

template(仅当包含的行数少于几千行时,这才是合理的做法)

这使用以下选项grep

  • -x,强制测试整条生产线,从生产线的开始到结束。如果没有这个,如果 in 中的一行template与 in 中的一行data部分匹配(例如,该行部分hello world匹配),我们可能会得到误报。hello world!
  • -F,使用字符串比较而不是正则表达式匹配。如果没有此选项,grep则会将 in 中的行template视为正则表达式,如果任何模式行包含正则表达式中的特殊字符,则可能会产生错误的结果。
  • -f template,这使得grep使用每一行template单独作为模式来匹配data文件中的每一行。

向此添加-q选项(使其grep安静并在找到匹配项后立即退出)允许我们在简单的测试中使用它:

if ! grep -q -xF -f template data; then
    cat template >>data
fi

仅当命令无法找到in中任何行的匹配项时,语句if主体才会将文件追加template到文件末尾。datagreptemplatedata

相关内容