grep
sempre exibirá o nome do arquivo contendo a correspondência se mais de um arquivo for fornecido na linha de comando. Se você passar apenas um arquivo, nenhum nome de arquivo será impresso.
Para forçar sempre a impressão do nome do arquivo junto com a correspondência real, adicione /dev/null
como um arquivo extra para o grep:
find /tmp -type f -name '*.xml' -exec grep -o -P '(?<=<Name>).*(?=</Name>)' {} /dev/null \;
Ou, para potencialmente menos invocações de grep
, use find -exec grep ... {} +
:
find /tmp -type f -name '*.xml' -exec grep -o -P '(?<=<Name>).*(?=</Name>)' /dev/null {} +
Pelo menos o GNU grep
, bem como grep
no OpenBSD e no FreeBSD também suportam o -H
flag para sempre imprimir o nome do arquivo, mesmo se apenas um arquivo for dado. Como você usou grep -P
, provavelmente está usando o GNU grep
de qualquer maneira.