我需要在文件周围添加PHP标记。可以很容易地附加它们
find . -exec echo "?>" >> '{}' \;
但我怎么能在前面加上的标签<?php
?
我需要在文件周围添加PHP标记。可以很容易地附加它们
find . -exec echo "?>" >> '{}' \;
但我怎么能在前面加上的标签<?php
?
Answers:
我尚不能发表评论,但只需一步即可完成所有操作:
find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
您可以使用perl一线式完成此操作:
perl -0777 -p -i -e "s/^/hey /g" testfile
该-0777
部队的文件啜模式,让整个文件被读作一行。-p
启用循环。-i
启用文件的就地编辑。^
指示一行的开始。
$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf
更新:如注释中所述,您可以选择使用-i.bak
代替来自动生成备份-i
。如果您的命令有错误,这将提供额外的安全性。参数to -i
成为备份的后缀。
更新一堆文件时,可以使用运行命令-i.backup${RANDOM}
,检查所有文件是否正确更新,然后删除所有具有该扩展名的文件。
-i
不带后缀的标志,请警告读者,这表示您没有备份。如果再加上几个字符(-i.bak
),则可以在单线包含错字的情况下得到备份。相当简单的错字(例如忘记-p
标记)可能会破坏您的一整天。
sed
用于编辑流-文件不是流。使用用于此目的的程序,例如ed
或ex
。该-i
选项sed
不仅不便于携带,这也将打破你可能遇到的任何符号链接,因为它本质上其删除,并重新创建它,这是毫无意义的。
for file in foo bar baz; do
ed -s "${file}" << EOF
0a
<?php
.
w
EOF
done
ed
用于此目的,请在答案中显示。
您为在目录中每个文件末尾添加内容而写的内容的替代方法bash
:
for FNAME in *
do
echo "?>" >> $FNAME
done
虽然我很喜欢你find
的一线:)
$FNAME
应该是$fname
-按照惯例,我们将环境变量(PAGER,EDITOR,SHELL等)和内部外壳变量(BASH_VERSION,RANDOM等)大写。所有其他变量名称应至少包含一个小写字母。该约定避免了意外覆盖环境和内部变量。