我的 grep 输出应该显示在每个后续行中缩进量增加 1 的行。
grep 命令输出是:
答案1
使用 GNU awk
,我们可以输出每行输入,缩进与文件中的行号相对应的空格数减 1。
grep ... | awk '{ printf "%2$*1$s\n", NR+length-1, $0 }'
这里使用的格式printf
字符串指定输出第二个字符串参数(即$0
当前行),其字段宽度由第一个参数给定(NR+length-1
输入中当前行的序号,加上行的长度,减去1)。这样做的效果是你得到以交错方式输出的线条,这正是你想要的效果。
大多数非 GNU 实现awk
不支持这种更高级的printf
格式使用,因此您需要以不同的方式解决它。
grep ... | awk '{ print indent $0 } { indent = indent " " }'
上面的命令可能比第一个命令更容易理解awk
。我们正在使用一个称为 的变量indent
。该变量仅包含空格,在输出以 的当前值为前缀的当前行后,我们为每行输入添加一个新的空格字符indent
。
在上面的两个管道中,grep ...
代表grep
您在传递问题时提到的命令。