将第一行替换为 file1 的输出,并将文件 2 的内容添加到文件夹中的所有文件

将第一行替换为 file1 的输出,并将文件 2 的内容添加到文件夹中的所有文件

我有一个文件列表,我想使用 sed 对其进行批量编辑。

  1. 将目录中所有文件的第一行替换为输出header.txt
  2. footer.txt修改所有文件的输出。

假设我必须替换文件夹中所有文件的当前 XML 标头,如下所示:

从:

<?xml version="1.0" encoding="utf-8"?>

到:

<?xml version="1.0" encoding="utf-8"?>
<Container xmlns="http://www.arun-test.com/1.0">
  <APIHeader version="2.0" exportTime="Sun Oct 11 09:42:25 EST 2020"></APIHeader>

另外,我必须将文件内容的输出添加footer.txt到目录中的所有文件。

请指导我完成正确的步骤。

答案1

假设您要使用 bash shell 从所有文件中删除第一行并插入页眉,并在末尾附加页脚:

for f in *.xml; do
    tmp=$(mktemp)
    ( 
        cat header.txt
        tail -n +2 "$f"
        cat footer.txt
    ) > "$tmp" && mv "$tmp" "$f"
done

答案2

您可以使用 sed 的命令分别在地址和处r读取并插入页眉和页脚文件。1$

假设 GNU sed (基于您的 'linux' 标签),并且目录中的文件数量不足以超过最大命令长度,那么

sed -i -e '1r header.txt' -e '1d' -e '$r footer.txt' dir/*

header.txt会将和的内容添加footer.txt到 中的每个文件中dir

注意,-i会导致原来的文件被覆盖- 你最好用 来测试它-s和/或通过更改为类似的东西-i来进行备份。-i-i.bak

相关内容