我希望在bash中向多个文件添加一些文本,在这篇文章中找到了处理prepend的方法:prepend to a file one liner shell?
我可以使用find找到需要处理的所有文件:
find ./ -name "somename.txt"
但是我如何使用管道将这两者结合起来?
我希望在bash中向多个文件添加一些文本,在这篇文章中找到了处理prepend的方法:prepend to a file one liner shell?
我可以使用find找到需要处理的所有文件:
find ./ -name "somename.txt"
你有几个选项。最简单的可能是使用sed:
find ./ -name somename.txt -exec sed -e '1i\
My new text here' {} \;
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...'
),它就可以正常工作了(仅在开头添加一次)。 - Julien-Lfind . -name "somename.txt" | while read a; do prepend_stuff_to "$a" ; done
或者
find . -name "somename.txt -exec prepend_stuff_to "{}" \;
find ./ -name "somename.txt" -print0 | xargs -0 -n 1 prepend_stuff_to
/