查找、grep 然后创建表

查找、grep 然后创建表

我试图找到所有*.mdat ${PWD},然后 grep 查找以 开头的行title:并将其与绝对文件路径-H和模式匹配的行号一起打印-n,然后我尝试将结果输出到带有分隔符的表-s:

find ${PWD} -type f -name "*.md" -exec bash -c 'i="$1"; grep -HnE "^title:" $1; | column -t -s :;' _ {} \;

这在 grep 之前一直有效,但我无法创建表。

另外,从@steeldriver建议的更正来看,执行似乎是在每个find结果上一一发生的,因此没有创建表?


样本输出

/Admin/Specification/Specification.md    2  title   Specification
/Admin/GraphicCard/index.md              2  title   "GraphicCard"

答案1

你可能想太多了。与其尝试将 的结果制成表格grep,为什么不让awk一位多产的表格制作者为您制作表格呢?

find . -type f -name \*.md -print0 | xargs -0 awk 'BEGIN { OFS="\t" } /^title:/ { print FILENAME, FNR, $0 }'

find将找到md您感兴趣的所有文件,并将它们作为参数awk通过xargs.然后,我们awk在与您的条件匹配的行上吐出文件名(将find通过完整的相对路径传递)、文件中的记录号(即行号)以及如文件;全部由OFS输出字段分隔符中定义的制表符分隔。

如果您想更精确地对齐输出,您可以执行以下操作:

/^title:/ { printf( "%35s %4d %s\n", FILENAME, FNR, $0 ) }

另外,如果您不想find | xargs awk但又愿意find -exec,这也可以:

find . -name \*.md -type f -exec awk '/expiry/ { printf( "%30s %4d %s\n", FILENAME, FNR, $0 ) }' "{}" +

相关内容