如何在 busybox 中迭代 grep -R 输出?

问题描述 投票:0回答:1

我想将一堆以

#
开头的文件中的评论收集到仅包含评论的文件中。我可以这样做:

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 utils 不可用。

shell busybox
1个回答
0
投票

我不知道 awk 支持在没有 shell 重定向的情况下自行打印到文件,这个 answer 向我展示了并且手册页确认了

print expr-list >file 在文件上打印表达式。 每个表达式由 OFS 的值分隔。 输出记录以 ORS 的值结束。

虽然手册页是 GNU Awk 的,但这似乎也适用于 busybox awk。

其次,我们已经有了关于如何使用 awk 打印除第一个字段之外的所有内容的答案。

所以我们可以做

grep -R '^#' . | \ awk -v FS=: -v OFS=: '{ key = $1; $1 = ""; a[key] = a[key] "\n" substr($0,2) } END { for (key in a) print substr(a[key], 2) > "/path/to/comments/"key }'`

END

部分需要另一个
substr
,因为
a
数组的每个元素都以空换行符开头。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.