Macos 使用sed将字符串前置到多个文件

Macos 使用sed将字符串前置到多个文件,macos,sed,Macos,Sed,在过去的一个小时里,我一直在尝试sed,但似乎无法让它工作。我需要在文件夹(示例文件夹“a”)中所有python文件的开头加一行前缀 首先,我使用find查找所有python文件: find /A -maxdepth 1 -name "*.py" 这显示了python文件的列表。(工作!) 然后,当我按照一些博客和在线教程的建议尝试以下内容时: find /A -maxdepth 1 -name "*.py" -exec sed -i '1i # -*- coding: utf-8 -*-'

在过去的一个小时里,我一直在尝试sed,但似乎无法让它工作。我需要在文件夹(示例文件夹“a”)中所有python文件的开头加一行前缀

首先,我使用find查找所有python文件:

find /A -maxdepth 1 -name "*.py"
这显示了python文件的列表。(工作!)

然后,当我按照一些博客和在线教程的建议尝试以下内容时:

find /A -maxdepth 1 -name "*.py" -exec sed -i '1i # -*- coding: utf-8 -*-'
我得到以下错误:

sed: 1: "/A/buttons.py": extra characters at the end of h command
什么是h命令?如何正确地做到这一点


顺便说一句,我正在使用Mac OS X。用以下命令替换find/sed命令:

find /A -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\
Text to prepend
' {} \;
cd /A
for i in *.py; do
[[ $(sed q $i) != "# -*- coding: utf-8 -*-" ]] && sed -i.bak '1i\
# -*- coding: utf-8 -*-
' $i
done 

使用下面的命令。它在我的位置工作

find /A -maxdepth 1 -name "*.py"| xargs perl -pi -e 'if($f==1 or $.==1){s/^/# -*- coding: utf-8 -*-\n/g;$f=0;}if(eof){$f=1}'
如果要在
find
中使用
exec

find /A -maxdepth 1 -name "*.py" -exec perl -pi -e 'if($f==1 or $.==1){s/^/# -*- coding: utf-8 -*-\n/g;$f=0;}if(eof){$f=1}' {}/;

你要准备的确切路线是什么?这对我来说很有用:
find A-maxdepth 1-name“*.py”-exec sed-i'1i Text作为“{}”的前缀我要添加:
#-*-编码:utf-8-*-
我不需要备份。我希望它直接写入python文件。上面的命令只会直接写入
*.py
文件。为了安全起见,它只会创建额外的
*.bak
文件。如果你不想要它,只需删除
.bak
。我在Mac OS X上的终端中得到一个错误:sed:1:“1i Text to prepend”:我期望的命令\后跟Text Mac版本的sed确实有其局限性。例如,它需要\after
i
。您可以尝试以下操作:
find A-maxdepth 1-name“*.py”-exec sed-i'1i\#-*-编码:utf-8-*-'{}好的,我也试过了…..但是我得到了这个:
sed:1:“1i \ \ \ \-*-编码:utf-8-*-”:在I命令结尾的\之后额外的字符
我尝试转义\但也没有用。发生什么事?