如何让 'ack' 命令在每一行打印找到结果的文件名

如何让 'ack' 命令在每一行打印找到结果的文件名

默认情况下ack命令以下列方式打印输出

ack --jsp '</div>'

a.jsp
5:</span></div>
10:</table></div>
b.jsp
3:</div><div>xyz
8:</div><a>

有没有办法以以下方式输出结果?

<filename>:<linenum>:<matchedtext>   

a.jsp:5:</div>
a.jsp:10:</div>
b.jsp:3:</div>
b.jsp:8:</div>

虽然可以--output=expr根据正则表达式捕获组输出匹配项,但我不确定是否有任何方法可以获取匹配文本的文件的名称以及行号

ack --jsp -o -h --output=':$1:$2' '(</(div)>)'

:</div>:div
:</div>:div
:</div>:div
:</div>:div

如果无法使用 ack,还有其他方法吗?

答案1

好的,快速扫描 ack 源后,我发现以下命令行选项可以获取所需的结果

ack --jsp --nogroup -o '(</(div)>)'


a.jsp:5:</div>
a.jsp:10:</div>
b.jsp:3:</div>
b.jsp:8:</div>

或者

ack --jsp --nogroup --output='$2' '(</(div)>)'


a.jsp:5:div
a.jsp:10:div
b.jsp:3:div
b.jsp:8:div

相关内容