【问题标题】:How to add 2 lines at the start of all the .c files in the directory using shell or perl如何使用 shell 或 perl 在目录中所有 .c 文件的开头添加 2 行
【发布时间】:2011-12-13 20:13:16
【问题描述】:

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

【问题讨论】:

  • 这种低级、平台无关、字节转换是我决定使用 .NET 为我编写样板的原因。

标签: perl shell sed


【解决方案1】:

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

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

当然,请务必先备份文件。

【讨论】:

  • SSD 在我懒惰的骨头里告诉我这可以用 RAM 缓冲区做得更好。 Linux 拥有如此出色的 RAM 磁盘,我几乎每天都想使用它。
【解决方案2】:

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;}'

【讨论】:

  • 这基本上是正确的方法,但是您在find 命令中缺少引号,并且您的sed 脚本有点乱。有一个专用的sed 命令i 用于插入一行 - 我肯定更喜欢那个。
  • @Raj:找到cpath-to-find路径下的所有*.c和*.h文件并应用命令
【解决方案3】:

快速单行:

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

解释:

  • 通过-pi 使用就地编辑(如果您想要备份:-i<extension>, 例如-i.bak)。
  • 使用 slurp 模式(通过将 $/ 设置为 undef 来读取整个文件)仅 影响第一行。
  • 使用 shell glob 查找文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2022-01-04
    • 2022-08-24
    • 2011-04-15
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多