此问题在此处已有答案:
How can I do a recursive find/replace of a string with awk or sed?(37个答案)
七年前就关门了。
在Mac电脑上,我使用Hazel运行一个shell脚本,以便在我的Downloads文件夹的多个子目录中查找和替换.txt
文件中的文本。script.shscript.sh
目前的外观如下:
#!/bin/bash
cd /Users/admin/Downloads/
perl -pi -w -e 's/OldText/NewText/g;' *.txt
它可以工作,但是不能查看下载目录中的所有子目录。我该怎么做呢?
2条答案
按热度按时间jq6vz3qz1#
使用find和xargs
类似于(NOT TESTED!)的内容:
gijlo24d2#
我不确定为什么在这种情况下需要
perl
,也不确定Hazel是谁,为什么她要运行您的shell脚本,但是既然您已经将问题标记为shell
,并且显然正在使用bash
,我将提供一个仅适用于shell的答案。注意,这也适用于其他shell,而不仅仅是bash。请注意,为了便于阅读,此
find
命令分为两行。它使用sed
而不是perl
,因为sed
更小,可能更快,并且被视为标准shell工具,而perl
可能并不适用于所有系统。还要注意,我使用的
sed
选项的确切语法可能取决于系统上sed的实现。find
命令的工作方式如下:您可以使用
man find
查看详细信息,但我在这里提供的命令将执行以下操作。/Users/admin/Downloads/
-type f
-查找文件(而不是目录或符号链接)-name "*.txt"
-AND查找与此文件规范匹配的内容-exec ...
-AND执行以下shell命令,用找到的文件名替换{}
。