繁体   English   中英

如何使用sed在模式匹配中删除/添加行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM