unix sed命令检查是否有任何替换

时间:2015-04-13 05:04:33

标签: unix sed

我基本上使用sed -i 's:a:b:g' filename.txt命令将a替换为文件中的b
现在我想知道是否有任何方式我可以知道在语句执行完毕后,替换完成(文件中基本上有a

1 个答案:

答案 0 :(得分:2)

这是一种方法:

sed -i.bak 's:a:b:g' file && diff file file.bak

这会创建一个备份文件,然后将备份与新版本进行比较。将显示任何包含更改的行。

对于OSX / BSD系统,您可能需要在-i.bak之间留出空格。

计算更改的行数

这会将每个更改的行写入stderr,然后使用wc对它们进行计数:

sed -i 's:a:b:g; tc; b; :c; w /dev/stderr' file 2>&1 | wc -l

工作原理:

  • s:a:b:g;

    这是您的替代命令

  • tc;

    如果进行了替换,请跳转到标签c

  • b;

    分支到最后(sed将在下一行开始新鲜)。只有在未进行替换的情况下才会执行此行。

  • :c;

    标签为c

  • w /dev/stderr

    将该行写入stderr。

  • 2>&1

    将stderr重定向到stdout,以便我们可以将其传送到wc进行计数。