[英]How do I remove/add line on pattern match using sed
我试图用'sed'完成的是在模式匹配的情况下删除一行。 如果模式不匹配,则添加一行。
但是我该怎么做呢? 提前致谢
示例:我希望它在Crontab中使用此行:
*/1 * * * * script 1 test
使用其他脚本,如果此模式存在,我想删除此行;否则,如果模式不匹配,则添加此行。
awk -v tgt='*/1 * * * * script 1 test' 'index($0,tgt){found=1;next} {print} END{if (!found) print tgt}' file
这可能对您有用(GNU sed):
sed 'x;/./{x;b};x;/pattern/{h;d};$a\append new line' file
一个好的做法是用注释标记自动添加的crontab条目:
* * * * * script 1 test #projectfoo-testjob
这使您可以轻松删除作业:
sed -i.bak '/projectfoo-testjob/d' file
或添加:
grep -q "projectfoo-testjob" file || \
echo '*/1 * * * * script 1 test #projectfoo-testjob' >> file
通过像这样标记作业,可以防止用户重新格式化其crontab时出现重复,例如使用制表符代替空格,还可以防止删除用户为其自己添加的类似作业。
仅使用grep -qF'line'文件&& echo'line'>>文件在文件中找不到时追加行:
grep -qF '*/1 * * * * script 1 test' file || echo '*/1 * * * * script 1 test' >> file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.