我碰到很多答案,包括论文:
- OSX 上的 sed 在某一行插入
- https://stackoverflow.com/questions/14846304/sed-command-error-on-macos-x
- https://stackoverflow.com/questions/4247068/sed-command-failing-on-mac-but-works-on-linux
- https://stackoverflow.com/questions/16266281/how-to-add-text-to-the-beginning-of-all-files-in-a-folder
而且我找不到办法做我想做的事。我需要在目录的每个文件#encoding:utf-8
的开头插入(递归地)。.html.erb
我尝试使用这个命令
find . -iname "*.erb" -type f -exec sed -ie "1i \#encoding:utf-8" {} \;
但它会抛出这个错误:
sed: 1: "1i #encoding:utf-8": i 命令末尾 \ 后的额外字符
答案1
答案2
您可以在 Ex 模式下使用 Vim:
ex -sc '1i|#encoding:utf-8' -cx file
1
选择第 1 行i
插入文本和换行符x
保存并关闭
答案3
以下是做你想做的事情的几种方法:
sed
find . -iname "*.erb" -type f -exec \ sed -i '' '1s/^/#encoding:utf-8\n/' {} \;
我无法访问 BSD
sed
进行检查,因此我无法保证\n
能够正确读取。在单个文件上尝试该命令,并且无需-i
第一个文件来确认。Perl
find . -iname "*.erb" -type f -exec \ perl -i -pe 'print "#encoding:utf-8\n" if $.==1;' {} \;
壳
find . -iname "*.erb" -type f -exec \ sh -c 'echo "#encoding:utf-8" >tmp && cat "$1" >> tmp && mv tmp "$1"' sh {} \;