将标题添加到多个文本文件中



可能的重复:
sed/awk搜索和替换/插入文件中的文本

我想知道如何在一个目录中包含的多个文本文件中添加一条"标头"行。bash命令行很棒!

thx。

edit

我在这里找到了我的需求:http://perldoc.perl.org/index-faq.html享受!这是我的答案:

perl -pi -e 'print "**MyHeaderText**n" if $. == 1' *

选项1:几乎可以使用Unix的任何版本

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,戒烟,管道和期限)下将其删除。然后,主循环将标头字符串和文件复制到临时性,然后将临时性移到原始文件上,将删除所有剩余文件(如果出现问题出现)并取消清理,以便外壳可以干净地退出。

>

如果您的原始文件具有多个(硬)链接,或者是符号链接,则将失去这些特殊属性。要解决此问题,您必须使用cp $tmp $file,然后也必须在$tmp中删除文件。

如果您没有mktemp COMAND,则可以使用:

tmp=${TMPDIR:-/tmp}/ins.$$

生成一个名称。它比mktemp的名称更容易预测,并且不太安全,尤其是当您作为root运行时。如果您有多个文件系统,则可能会有智慧将当前目录用作$TMPDIR

选项2:gnu sed

如果您有GNU sed,并且没有符号链接或硬链接可以处理,那么您可以使用其-i选项进行现场Alter。

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避免循环中的尴尬凹痕。

选项3:其他工具

还有许多其他可能的技术。例如,您可以使用edex编辑文件。您可以使用Perl或Python或awk进行处理。

相关内容

  • 没有找到相关文章

最新更新