我可以使用 sed 递归地在一堆文件中查找和替换字符串。如下所示:
find -name "*.py" -not \( -name .svn -prune \) -type f -print0 | xargs
-0 sed -i 's/cat/dog/g'
但是有没有办法在文件内部和实际文件名中搜索字符串?
如果在文件名中找到该字符串,则用新字符串替换文件名中的字符串。
如果字符串在实际文件中,则用新字符串替换该字符串。
当然,还要进行递归搜索。
有任何想法吗?
答案1
我不知道如何一次性完成此操作,但它可以很容易地作为一个小脚本来完成,例如(经过轻度测试):
find -name "*.py" -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'\0' filename; do
sed -i 's/cat/dog/g' "$filename"
echo "$filename" | grep -q "cat" \
&& mv "$filename" "${filename/cat/dog}"
done