我正在使用 grep、sed 和 column 来制作一些 makefile 文档,但是出现以下错误:column: line too long
。
我的尝试如下:
## this is the documentation
yes:
@echo hello
help:
@grep -Pzo "##.*\n[a-zA-Z0-9_-]+:" $(MAKEFILE_LIST) \
| sed -z "s/\n/,/" \
| sed -n "s/##\(.*\),\(.*\)[:, 1]/\2\1/p" \
| column -t -s ','
我真的不明白这里的问题,因为当我运行不带列的命令时,我得到的行大小远低于 2049(由 C 代码中的 MAXLINELEN 定义)。
回答
读完答案后,我得出结论,只需在第二个 grep 的末尾添加一个 '\n'。如下所示:
sed -n "s/##\(.*\),\(.*\)[:, 1]/\2\1\n/p"
答案1
这可能是因为您传递了一个非换行符终止的字符串:
$ printf 'foo,bar,baz\n' | column -t -s,
foo bar baz
但
$ printf 'foo,bar,baz' | column -t -s,
column: line too long
也许可以考虑sed -z "s/\n/,/"
用以下方法替换你的管道paste -sd,