我有一个包含 txt、html、jpg 和 png 文件的文件夹。
现在我想检查所有基于文本的文件(txt 和 html)并开始搜索和替换。
我执行了以下操作并且运行良好:
find ./ -iregex '.*\.\(txt\|html\)$' -exec sed -i 's/search/replace/g' {} +
但现在我还想记录执行替换的文件。
假设我的文件夹中有五个 txt 和/或 html 文件。但只有其中两个会有一些替换,因为字符串search
就在其中。
因此,在命令之后,我想要一个日志文件(例如myLog.log
),其中打印两个文件(完整路径)。
但我怎样才能实现这样的命令呢?
这sed命令没有这样的参数/选项。
答案1
您必须先搜索search
模式,然后sed
搜索 和日志。
尝试(为了可读性换行)
find ./ -iregex '.*\.\(txt\|html\)$' \
-exec grep -q search {} \; \
-print \
-exec sed -i 's/search/replace/g' {} + \
> my-sed.log
在哪里
search
in-exec grep -q search {} \;
是您的搜索模式。请注意,您不能使用+
who will match 多个文件。-print
打印匹配的文件,从而可以记录