首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算使用正则表达式完成的替换次数

计算使用正则表达式完成的替换次数
EN

Stack Overflow用户
提问于 2015-04-27 16:33:27
回答 1查看 75关注 0票数 4

我需要使用regex替换一些文件中的内容。我是这样做的:

代码语言:javascript
运行
复制
#!/usr/bin/env bash

find /path/to/dir \
    -type f \
    -name '*.txt' \
    -exec perl -e 's/replaceWhat/replaceWith/ig' -pi '{}' \; \
    -print \
    | awk '{count = count+1 }; END { print count " file(s) handled" }'

echo "Done!"

此代码向用户显示它所处理的文件数。但是我怎么能不计算文件,而是替换文件呢?处理的每个文件都可能产生零个、一个或多个regex替换。

EN

Stack Overflow用户

发布于 2015-04-27 17:15:44

您可以向grep添加额外的-exec调用,然后将匹配的数量传递给awk,而不仅仅是文件名:

代码语言:javascript
运行
复制
#!/usr/bin/env bash

find /path/to/dir \
    -type f \
    -name '*.txt' \
    -exec grep -c 'replaceWhat' '{}' \; \
    -exec perl -e 's/replaceWhat/replaceWith/ig' -pi '{}' \; \
    | awk '{count += $0 }; END { print count " replacement(s) made" }'

echo "Done!"

示例(替换“之前”为“之后”):

代码语言:javascript
运行
复制
$ tail -n +1 *.txt
==> 1.txt <==
before
foo
bar

==> 2.txt <==
foo
bar
baz

==> 3.txt <==
before
foo
before
bar
before

$ ./count_replacements.sh
4 replacement(s) handled
$ tail -n +1 *.txt
==> 1.txt <==
after
foo
bar

==> 2.txt <==
foo
bar
baz

==> 3.txt <==
after
foo
after
bar
after
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29890824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档