我想知道如何将一个“标题”行添加到一个目录中包含的多个文本文件中。 Bash命令行会很棒!
THX。
修改
我在这里找到了我的需求:http://perldoc.perl.org/index-faq.html享受! 这是我的答案:
perl -pi -e 'print "**MyHeaderText**\n" if $. == 1' *
答案 0 :(得分:5)
tmp=$(mktemp) # Create a temporary file
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
header="This is the header line to be inserted"
for file in "$@"
do
{
echo "$header"
cat $file
} > $tmp
mv $tmp $file
done
rm -f $tmp
trap 0
这会安全地创建一个临时文件,并确保在合理的信号集合(HUP,INT,QUIT,PIPE和TERM)下删除它。然后主循环将头字符串和文件复制到临时文件,并将临时文件移到原始文件上,删除任何剩余文件(如果出现问题)并取消清理,以便shell可以干净地退出。
如果您的原始文件有多个(硬)链接,或者它是符号链接,则会丢失这些特殊属性。要解决此问题,您必须使用cp $tmp $file
,然后您还必须删除$tmp
中的文件。
如果您没有mktemp
命令,可以使用:
tmp=${TMPDIR:-/tmp}/ins.$$
生成名称。它比mktemp
中的名称更容易预测,安全性更低,特别是如果您以root身份运行。如果您有多个文件系统,那么将当前目录用作$TMPDIR
也可能是明智之举。
如果你有GNU sed
并且没有符号链接或硬链接来处理,那么你可以使用它的-i
选项来进行就地修改。
header="This is the line to be inserted"
for file in "$@"
do
sed -i -e "1i\
$header" $file
done
这会在每个文件的第一行之前插入$header
的值。您可以将编辑脚本编写到文件中并使用sed -i -f sed.script $file
来避免循环中的尴尬缩进。
还有许多其他可能的技术。例如,您可以使用ed
或ex
来编辑文件。您可以使用Perl或Python或awk
进行处理。