有没有*尼克斯公用事业通过它,我可以将内容附加到文件(例如,将模板文件的内容附加到第二个文件的末尾),前提是第二个文件中的内容尚未部分或全部可用?
一个可以使用这grep 解决方案,但我发现那里的代码目前有点复杂,如果有的话,我更喜欢一个专用的实用程序。
答案1
假设您希望仅template
在.data
template
data
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
到文件末尾。data
grep
template
data