如何在多个文件的开头添加标签?

19 sed text-processing

我需要在文件周围添加 PHP 标签。使用附加它们很容易

find . -exec echo "?>" >> '{}' \;
Run Code Online (Sandbox Code Playgroud)

但我怎样才能在标签之前加上<?php

use*_*686 19

sed -i "1s/^/<?php /" file
Run Code Online (Sandbox Code Playgroud)

-i用于就地编辑。)

更便携的版本:

ed file <<!
1s/^/<?php /
wq
!
Run Code Online (Sandbox Code Playgroud)

  • `-i` 不可移植,实现之间的语法不同,并且会破坏符号链接。您最好使用实际设计用于编辑文件的应用程序。 (3认同)
  • 我正在使用 BSD sed,它允许就地编辑,但我需要给它一个扩展名。即'sed -i .bak“模式”文件' (2认同)

小智 5

你可以用 perl one-liner 来做到这一点:

perl -0777 -p -i -e "s/^/hey /g" testfile
Run Code Online (Sandbox Code Playgroud)

-0777部队的文件啜模式,让整个文件被读作一行。-p启用循环。-i启用文件的就地编辑。^表示一行的开始。

$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf
Run Code Online (Sandbox Code Playgroud)

更新:如评论中所示,您可以选择使用-i.bak而不是自动生成备份-i。如果您的命令出现错误,这将提供额外的安全性。参数-i 成为备份的后缀。

更新一堆文件时,您可以使用 运行命令-i.backup${RANDOM},检查所有文件是否正确更新,然后删除所有具有该扩展名的文件。


小智 5

你可以使用这样的AWK过滤器,

awk '{if(NR==1) printf "%s%s","PREFIX",$0; 否则打印 $0}' testfile > newfile

PREFIX你的 php 前缀字符串在哪里。


小智 5

我还不能发表评论,但要一步完成:

find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
Run Code Online (Sandbox Code Playgroud)


Chr*_*own 5

sed用于编辑流——文件不是流。使用专门用于此目的的程序,例如edex。该-i选项sed不仅不可移植,还会破坏您可能遇到的任何符号链接,因为它实际上会删除它并重新创建它,这是毫无意义的。

for file in foo bar baz; do
    ed -s "${file}" << EOF
0a
<?php 
.
w
EOF
done
Run Code Online (Sandbox Code Playgroud)