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


Answers:


18
sed -i "1s/^/<?php /" file

-i用于现场编辑。)

更便携的版本:

ed file <<!
1s/^/<?php /
wq
!

漂亮-比我要描述的要容易一些:)
沃伦

我需要在此处将扩展名添加到-i参数。您使用的是sed还是GNU sed?

理查德(Richard):我使用的是GNU sed,它允许添加备份后缀。
grawity

2
我正在使用BSD sed,它允许就地编辑,但是我需要给它扩展名。即“ sed -i .bak“样式”文件”

3
-i不是可移植的,实现之间的语法不同,并且会中断符号链接。使用实际上旨在编辑文件的应用程序会更好。
克里斯·

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/\$/ ?>/" {} \;

爱它,节省了我几个小时。
史蒂夫·希尔

5

您可以使用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},检查所有文件是否正确更新,然后删除所有具有该扩展名的文件。


1
“值0777将导致Perl吞噬整个文件,因为没有具有该值的合法字节”,请参见sial.org/howto/perl/one-liner/#s3.5
Chris W. Rea

1
如果建议您使用-i不带后缀的标志,请警告读者,这表示您没有备份。如果再加上几个字符(-i.bak),则可以在单线包含错字的情况下得到备份。相当简单的错字(例如忘记-p标记)可能会破坏您的一整天。
Telemachus

@Telemachus-同意。更新。

4

sed用于编辑流-文件不是流。使用用于此目的的程序,例如edex。该-i选项sed不仅不便于携带,这也将打破你可能遇到的任何符号链接,因为它本质上其删除,并重新创建它,这是毫无意义的。

for file in foo bar baz; do
    ed -s "${file}" << EOF
0a
<?php 
.
w
EOF
done

您呈现的是编辑单个文件的基本方法。这似乎无法解决问题-问题在于修改多个文件(尽管乍一看可能并不明显)。如果您知道如何ed用于此目的,请在答案中显示。
rozcietrzewiacz 2011年

@rozcietrzewiacz-由于grawity演示了编辑单个文件的相同方法(已被接受),因此我认为它适合回答。无论哪种方式,我都将其放在for循环中,这应该可以减轻您的担忧。
克里斯·

0

您为在目录中每个文件末尾添加内容而写的内容的替代方法bash

for FNAME in *
do
    echo "?>" >> $FNAME
done

虽然我很喜欢你find的一线:)


$FNAME应该是$fname-按照惯例,我们将环境变量(PAGER,EDITOR,SHELL等)和内部外壳变量(BASH_VERSION,RANDOM等)大写。所有其他变量名称应至少包含一个小写字母。该约定避免了意外覆盖环境和内部变量。
克里斯·

@Chris Down-我所见过的整个职业生涯因设置而异:小写,大写和驼峰:)
沃伦(

驼峰和小写都可以。无论哪种方式,不是环境变量的变量都不应使用全大写形式。
克里斯·

0

有简单的方法

echo "startstr$(cat filename)endstring" > filename.new

这将以结尾的换行符中断。
克里斯·唐纳

@ChrisDown文件中尾随换行符?
霍根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.