如何使用shell或perl在目录中所有.c文件的开头添加2行

如何使用shell或perl在目录中所有.c文件的开头添加2行,perl,shell,sed,Perl,Shell,Sed,我在一个目录中有很多.c文件和.h文件。我需要在所有的.c开头添加一条注释,比如“//INFO:这是raj编写的c文件”。你能告诉我如何使用脚本吗 听起来像是一次性的任务,所以一个简单的方法是这样做: for x in *.c *.h; do echo "//INFO This is C Files written by raj" > $x.temp-file cat $x >> $x.temp-file mv $x.temp-file $x done

我在一个目录中有很多.c文件和.h文件。我需要在所有的.c开头添加一条注释,比如“//INFO:这是raj编写的c文件”。你能告诉我如何使用脚本吗

听起来像是一次性的任务,所以一个简单的方法是这样做:

for x in *.c *.h; do
    echo "//INFO This is C Files written by raj" > $x.temp-file
    cat $x >> $x.temp-file
    mv $x.temp-file $x
done
当然,请确保首先备份文件。

使用
sed

find cpath-to-find -type f -name '*.c' -o -name '*.h' -execdir \
 sed '1i\//INFO This is C Files written by raj' {} \+
使用
awk

find cpath-to-find -type f -name '*.c' -o -name '*.h' -execdir \
awk ' NR == 1 { print "//INFO This is C Files written by raj"; } {print;}'
快速一行:

perl -pi -we 'local $/; s#^#//comment\n#;' *.c *.h
说明:

  • -pi
    一起使用就地编辑(如果需要备份:
    -i
    , e、 g.
    -i.bak
  • 使用slurp模式(通过将
    $/
    设置为未定义来读取整个文件)将仅 影响第一行
  • 使用shell glob查找文件

这种低级的、与平台无关的字节移位是我选择.NET为我编写样板文件的原因。我懒散的头脑中的SSD告诉我,使用RAM缓冲区可以做得更好。Linux有这么好的RAM磁盘,我几乎每天都想使用它。这基本上是正确的方法,但是在
find
命令中缺少引号,并且您的
sed
脚本有点乱。有一个专用的
sed
命令
i
用于插入一行-我当然更喜欢这样。@Raj:在路径
cpath中找到所有的*.c和*.h文件以查找
并应用该命令