Linux 如果行包含两个字符串,则更新行的第一个字符

Linux 如果行包含两个字符串,则更新行的第一个字符,linux,shell,awk,Linux,Shell,Awk,我正在寻找一个脚本来搜索一行,如果它包含两个字符串,然后找到该行的第一个字符是否包含某些字符,并删除它 例如,如果行包含两个字符串“abc”和“xyz”,则应查找行的第一个字符,如果行包含#,则应将其删除,反之亦然 它试图在crontab中运行下面的命令,并得到了结果 crontab -l | grep az2-er32-cxv-iz| grep aze 输出 #5,10 * * * * /opt/apps/scripts/dsm-rync -q -del -s az2-er32-cxv-

我正在寻找一个脚本来搜索一行,如果它包含两个字符串,然后找到该行的第一个字符是否包含某些字符,并删除它

例如,如果行包含两个字符串“abc”和“xyz”,则应查找行的第一个字符,如果行包含#,则应将其删除,反之亦然

它试图在crontab中运行下面的命令,并得到了结果

crontab -l | grep az2-er32-cxv-iz| grep aze  
输出

#5,10 * * * * /opt/apps/scripts/dsm-rync -q -del -s az2-er32-cxv-iz /opt/apps/sdl/scripts/aze-dsm-rync.app.config
由于很难直接更新crontab条目,我将其复制到
tmpfile


crontab-l>tmpfile
并试图运行
sed的/^#/'tmpfile
,但它正在删除所有的
#
,而不是像Shloim提到的那样匹配两个字符串的行,我不会给你代码本身,但我给你一段伪代码开始:

  • 为了知道一行是否包含至少两个单词,您可以在该行中搜索空格。(
    grep”“
  • 为了知道一行是否以某个字符开头,您可以搜索该字符,然后再搜索该字符。(
    grep“#”
  • 可以使用
    sed
    命令替换行中的字符

您可以使用
gnu awk
轻松完成此操作:

awk -i inplace '/az2-er32-cxv-iz/ && /aze/{sub(/^#/, "")} 1' crontab

这将从第一个位置删除
#
,如果线路中有
az2-er32-cxv-iz
aze

看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、回溯等)。你提供的细节越多,你可能得到的答案就越多。检查和。请发布真实输入(如果需要,请进行消毒)和所需输出的示例。谢谢,我用真实输出更新了问题。如果需要添加任何内容,请告知我,因为我尝试使用下面的sed命令将第行中匹配字符串的第一个字符#替换为空,但它没有返回所需的输出sed'/az2-er32-cxv-iz\| aze/s/^#/'谢谢,它在stdout上给出了精确的输出,但在我检查crontab条目时没有更新crontab条目。我们如何同时更新它您的awk版本是什么?下面返回的是awk-W版本。GNU Awk 4.2.1,API:2.0(GNU MPFR 4.0.1,GNU MP 6.1.2)将Awk存储为crontab,假设您的shell是bash:
crontab@pandeg:检查更新的答案或遵循Glenn的有用评论。