默认情况下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