命令影响了多少个实例?

时间:2014-08-08 18:59:22

标签: sed

有没有办法在cli中使用sed来返回受影响的行数,或者更好的是,如果使用全局参数,那么每行可能有多个影响的命令会影响多少个实例?对我来说,这意味着要做出多少次替换。

我想可以输出到一个新文件,然后在这两个文件上运行diff,但是我需要知道一个命令影响了多少个实例并不是那么好。我只是想知道是否可以使用sed原生的特征。

2 个答案:

答案 0 :(得分:5)

据我所知, sed 没有操作变量的原生功能(例如增加内部计数器)。当然,这是 awk 带来的功能之一 sed 。所以我的建议是你切换到 awk ,然后你可以轻松使用 awk 脚本,例如:

BEGIN { counter = 0 }
/mypattern/ { do-whatever-you-want; counter++ }
END { print counter }

答案 1 :(得分:2)

您要求sed解决方案。这是一个纯sed方法,可以一些你想要的东西:

sed 's/old/new/;t change;b;:change w changes'

执行此操作后,更改的行(如果有)将写入文件changes

工作原理:

  • s/old/new/;

    将此替换为您想要做的任何替换。

  • t change;

    如果前面的sed命令发生任何更改,这会告诉change跳转到标签s

  • b;

    如果没有发生上一次跳转,则执行此b命令,结束该行的处理。

  • :change w changes

    这告诉sed将当前行(由s命令更改)写入文件changes

下一步

此处的下一步是计算更改。为此,sed can do arithmetic但它不适合胆小的人。

OSX

我记得,Mac OSX上的sed版本不支持将命令与分号链接在一起。相反,尝试:

sed -e 's/old/new/' -e 't change' -e b -e ':change w changes'