我想将以 开头的一堆文件中的评论收集#
到仅包含评论的文件中。我可以这样做:
find . -type f -exec grep '^#' {} > /path/to/comment/storage/{}
非常简单。但是,这非常浪费,因为它会grep
为每个文件分叉,并创建大量空文件。grep -R '^#' .
会好得多,但我该如何处理它的输出?类似的东西export IFS=:;grep -R '^#' .|while read -r file contents; do echo $file-$contents; done
是一个有希望的开始,但是当内容本身也包含冒号时,这就会崩溃。它还面临着正确创建和附加到每个文件的挑战。
作为额外的限制,这需要以busybox
shell / awk / 等形式运行,GNU 实用程序不可用。
我不知道 awk 支持在没有 shell 重定向的情况下自行打印到文件,这个答案向我展示了这一点,手册页也证实了这一点
尽管手册页是 GNU Awk 的,但它似乎也适用于 busybox awk。
其次,我们已经有了如何使用 awk 打印除第一个字段之外的所有内容的答案。
所以我们可以
该
END
部分需要另一个,substr
因为a
数组的每个元素都以空行开头。最后,虽然
awk
当然可以包含,grep
但似乎没有办法让它整齐地包含grep -R
。在我写这篇文章时,似乎你的输入没有子目录,或者输出目录层次结构已经创建。如果是这种情况,你可以这样做: