【发布时间】:2011-12-13 20:13:16
【问题描述】:
我在一个目录中有很多 .c 文件和 .h 文件。我需要在所有 .c 的开头添加注释,例如“// INFO:这是 raj 编写的 C 文件”。你能告诉如何用脚本做到这一点吗?
【问题讨论】:
-
这种低级、平台无关、字节转换是我决定使用 .NET 为我编写样板的原因。
我在一个目录中有很多 .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;}'
【讨论】:
find 命令中缺少引号,并且您的sed 脚本有点乱。有一个专用的sed 命令i 用于插入一行 - 我肯定更喜欢那个。
cpath-to-find路径下的所有*.c和*.h文件并应用命令
快速单行:
perl -pi -we 'local $/; s#^#//comment\n#;' *.c *.h
解释:
-pi 使用就地编辑(如果您想要备份:-i<extension>,
例如-i.bak)。$/ 设置为 undef 来读取整个文件)仅
影响第一行。【讨论】: