我尝试用'sed'是模式匹配时删除一行。 如果模式不匹配,则添加一行。
但我怎么能这样做呢? 提前致谢
实施例: 我想在Crontab中使用这一行:
*/1 * * * * script 1 test
使用其他脚本我想删除此行,如果此模式存在,否则,如果模式不匹配,则添加此行。
答案 0 :(得分:0)
awk -v tgt='*/1 * * * * script 1 test' 'index($0,tgt){found=1;next} {print} END{if (!found) print tgt}' file
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed 'x;/./{x;b};x;/pattern/{h;d};$a\append new line' file
答案 2 :(得分:0)
一个好的做法是使用注释标记自动添加的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时防止重复,例如使用制表符而不是空格,可以防止删除用户为自己添加的类似作业。
答案 3 :(得分:0)
如果在文件中找不到使用grep -qF'line'文件&& echo'line'>>文件:
grep -qF '*/1 * * * * script 1 test' file || echo '*/1 * * * * script 1 test' >> file