有没有办法在cli中使用sed
来返回受影响的行数,或者更好的是,如果使用全局参数,那么每行可能有多个影响的命令会影响多少个实例?对我来说,这意味着要做出多少次替换。
我想可以输出到一个新文件,然后在这两个文件上运行diff
,但是我需要知道一个命令影响了多少个实例并不是那么好。我只是想知道是否可以使用sed
原生的特征。
答案 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但它不适合胆小的人。
我记得,Mac OSX上的sed
版本不支持将命令与分号链接在一起。相反,尝试:
sed -e 's/old/new/' -e 't change' -e b -e ':change w changes'