在bash / osx终端中预置多个文件

时间:2009-02-06 15:36:51

标签: shell

我想在bash中将一些文本添加到多个文件中,我发现这篇文章涉及前置文件:prepend to a file one liner shell?

我可以使用find找到我需要处理的所有文件:

find ./ -name "somename.txt"

但是如何使用管道将两者合并?

4 个答案:

答案 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 "{}" \;