如果搜索失败,使用 sed 执行 shell 脚本

如果搜索失败,使用 sed 执行 shell 脚本

我在做

sed "s/test1/replacetext" testfile.txt

我尝试使用 /q 来查找“test1”并执行 shell 脚本失败。我怎样才能做到这一点?谢谢内特

答案1

使用 GNUsed和多行输入:

sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
  • 在包含以下内容的行上pattern
    • 将行添加到保持缓冲区
    • 执行替换
  • 打印每一行
  • $当到达 最后一行 ( ) 时:
    • 获取保持缓冲区
    • 如果模式空间不包含pattern,则使用退出代码退出1
  • 空正则表达式//使用上次使用的正则表达式模式

选择 - awk

awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
  • 如果一行包含pattern,则变量repl会递增并进行替换
  • 最后,以logical not变量的 退出(如果repl为零,以 status 退出1

替代方案 –grep预先输入,例如:

if grep -q 'pattern' file; then
    # input contains pattern - do sed replacement
    sed 's/pattern/replacement/' file
else
    : input does not contain pattern - execute shell script
fi

相关内容