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