在多个文件的开头和结尾添加文本?

在多个文件的开头和结尾添加文本?

我在目录层次结构中有许多文件。对于每个文件,我想在开头添加“abcdef”,单独一行,在结尾添加“ghijkl”,单独一行。例如,如果文件最初包含:

# one/foo.txt
apples
bananas

# two/three/bar.txt
coconuts

然后,我希望它们包含:

# one/foo.txt
abcdef
apples
bananas
ghijkl

# two/three/bar.txt
abcdef
coconuts
ghijkl

做到这一点的最好方法是什么?

我已经做到了:

# put stuff at start of file
find . -type f -print0 | xargs -0 sed -i 's/.../abcdef/g'

# put stuff at end of file
find . -type f -print0 | xargs -0 sed -i 's/.../ghijkl/g'

但我似乎不知道如何在省略号中放置什么。

答案1

这不是 的工作sed。要添加行,只需使用I/O 重定向

对于名为 的单个文件filename,您可以执行以下操作:

mv filename temp
(echo abcdef ; cat temp ; echo ghijkl) > filename
rm temp

要对当前目录中的所有文件自动执行此操作,请使用findxargs

find -type f -print0 | xargs -0 -I % sh -c '
    mv "%" temp
    (echo abcdef ; cat temp ; echo ghijkl) > "%"
'
rm temp

答案2

如果您有 GNU sed,您可以使用i\a\构造:

使用行地址分别应用于第一行和最后一行:

find . -type f -print0 | xargs -0 sed -i -e '1i\abcdef' -e '$a\ghijkl'

答案3

For files in directory as file
echo "abcde" && cat file && echo "fghijk" > file

相关内容