我在目录层次结构中有许多文件。对于每个文件,我想在开头添加“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
要对当前目录中的所有文件自动执行此操作,请使用find
和xargs
:
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