过去一小时我一直在试验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.
答案 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}' {}/;