增加头部成多个文本文件[复制](Adding header into multiple text f

2019-08-02 05:38发布

可能重复:
桑达/ awk来查找和替换/插入文件中的文本

我想知道如何添加一个“头”行成包含在一个目录中的多个文本文件。 bash命令行就太棒了!

谢谢。

编辑

我发现我需要在这里: http://perldoc.perl.org/index-faq.html享受! 下面是我的回答:

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

Answer 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,QUIT,PIPE和期限)。 然后,主循环副本的头部字符串和文件到临时,并且在原有的移动暂时的,删除任何剩余文件(万一出事了),并取消清理这样的外壳可以完全退出。

如果你的原始文件有多个(硬)链接,或者如果它是一个符号链接,你失去了这些特殊的性质。 为了解决这个问题,你必须使用cp $tmp $file ,然后你必须删除在文件$tmp过。

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

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

生成一个名称。 它是更容易比从名字预见mktemp和安全性较低,尤其是当你以root身份运行。 也可能有使用当前目录作为智慧$TMPDIR ,如果你有多个文件系统。

选项2:GNU SED

如果你有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 ,以避免在循环尴尬缩进。

方案3:其他工具

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



文章来源: Adding header into multiple text files [duplicate]