我有一个文件列表,我想使用 sed 对其进行批量编辑。
- 将目录中所有文件的第一行替换为输出
header.txt
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