使用sed将字符串添加到多个文件

时间:2013-02-21 11:59:18

标签: macos sed

过去一小时我一直在试验sed,似乎无法让它发挥作用。我需要在文件夹中的所有python文件的开头添加一行,例如文件夹“A”。

首先,我使用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.

2 个答案:

答案 0 :(得分:2)

用这一个替换你的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 

答案 1 :(得分:0)

使用以下命令。它在我的地方工作

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}'

如果您想在exec

中使用find
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}' {}/;