我想在bash中将一些文本添加到多个文件中,我发现这篇文章涉及前置文件:prepend to a file one liner shell?
我可以使用find找到我需要处理的所有文件:
find ./ -name "somename.txt"
但是如何使用管道将两者合并?
答案 0 :(得分:9)
你有几种选择。最简单的可能是sed:
find ./ -name somename.txt -exec sed -e '1i
My new text here' {} \;
如果你添加'2q'告诉它你在预先准备好文本后就完成了会更快,如果你带有-i标志就会发生这种情况
find ./ -name somename.txt -exec sed -i .bak -e '2q;1i
My new text here' {} \;
这会使原始文件留下.bak
扩展名。
答案 1 :(得分:2)
find . -name "somefiles-*-.txt" -type f | while read line; do sed -i 'iThis text gets prepended' -- "$line"; done
或
find . -name "somefiles-*-.txt" -type f | xargs sed -i 'iGets prepended' --
最好的(我认为):
find . -name "somefiles-*-.txt" -type f -exec sed -i 'iText that gets prepended (dont remove the i)' -- '{}' \;
感谢缺少的“-hint。我当时也添加了重要的内容。
答案 2 :(得分:0)
find ./ -name "somename.txt" -print0 | xargs -0 -n 1 prepend_stuff_to
答案 3 :(得分:-1)
find . -name "somename.txt" | while read a; do prepend_stuff_to "$a" ; done
或
find . -name "somename.txt -exec prepend_stuff_to "{}" \;