Como parar o comando cat da saída do nome do arquivo se ele for canalizado para outro comando?

0

Estou tentando aprender expressões regulares e, por isso, criei um arquivo com alguns caracteres. Quando eu uso o comando cat e canalizo para o comando rgrep com um argumento para filtrar o texto, a saída resultante é "filename: filtered_text".

cat regex.txt | rgrep -E '^a'
regex.txt:a
regex.txt:aa
regex.txt:aaa
regex.txt:aaaa
regex.txt:aaaaa
regex.txt:aaaaaa
file:acpi
file:adduser.conf
file:aliases
file:aliases.db
file:alternatives
file:anacrontab
file:apache2
file:apg.conf
file:apm
file:apparmor
file:apparmor.d
file:apport
file:appstream.conf
file:apt
file:avahi

Não apenas isso, ele também verifica outros arquivos na pasta e, se eles corresponderem à expressão regular, também os mostra, mesmo que eu tenha canalizado apenas um único arquivo.

Como obtenho uma saída normal apenas com o conteúdo do arquivo que passei para o gato?

    
por Skaper 28.09.2018 / 19:30

2 respostas

2

Você precisa usar o -h flag com rgrep , pois é o rgrep que imprime os nomes dos arquivos. Isso sinaliza isso.

Eu só posso imaginar por que você usa rgrep em vez do simples grep e cat . Então, primeiro, você não precisa de cat . grep PATTERN FILE é suficiente. O segundo rgrep é equivalente a grep -r . E aqui está o que o -r sinaliza para grep :

-r, --recursive Read all files under each directory, recursively, following symbolic links only if they are on the command line. Note that if no file operand is given, grep searches the working directory. This is equivalent to the -d recurse option.

Para uma solução simples, tente:

grep '^a' regex.txt

(Não está claro com esse padrão, por que você usaria a opção -E .)

    
por 28.09.2018 / 19:46
-1

rgrep é um atalho (no meu Ubuntu 18.04: um script) para grep -r . man grep :

   -r, --recursive
          Read  all  files  under  each directory, recursively,

Na verdade, o uso de cat é inútil, pois rgrep parece ignorá-lo.

    
por 28.09.2018 / 19:43