【发布时间】:2010-10-05 23:09:52
【问题描述】:
我想在 bash 中为多个文件添加一些文本,我发现这篇文章处理了 prepend:prepend to a file one liner shell?
我可以使用 find 找到我需要处理的所有文件:
find ./ -name "somename.txt"
但是如何使用管道将两者结合起来呢?
【问题讨论】:
标签: shell
我想在 bash 中为多个文件添加一些文本,我发现这篇文章处理了 prepend:prepend to a file one liner shell?
我可以使用 find 找到我需要处理的所有文件:
find ./ -name "somename.txt"
但是如何使用管道将两者结合起来呢?
【问题讨论】:
标签: shell
您有多种选择。最简单的可能是 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 扩展名的原始文件。
【讨论】:
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)' -- '{}' \;
感谢缺少的“-提示。然后我也添加了重要的--s。
【讨论】:
i 标志之后添加了“1”(如下所示:-i 'i1Text...')并且它工作正常(在开始时只添加一次)
find ./ -name "somename.txt" -print0 | xargs -0 -n 1 prepend_stuff_to
【讨论】:
find . -name "somename.txt" | while read a; do prepend_stuff_to "$a" ; done
或
find . -name "somename.txt -exec prepend_stuff_to "{}" \;
【讨论】: