Como faço para que as linhas grep terminem em uma expressão específica

0

Eu tenho um arquivo de texto com 4 sentenças e quero que as que terminem em "eu", no entanto, quando eu faço grep "me $" ele não funciona.

Estou sentindo falta de algo?

(Eu queria que o resultado fosse a 1ª, a 2ª e a 4ª linha).

Editar: imagem substituída com texto.

$ cat sm.txt
somebody once told me

somebodyoncetoldme

the world was

gonna roll me
$ grep "me$" sm.txt
$
    
por rropes 31.10.2018 / 10:31

2 respostas

1

In comentários você diz que file identifica o arquivo de texto como um arquivo de texto ASCII com finais de linha CRLF. Essa é outra maneira de dizer que é um arquivo de texto do DOS, possivelmente gerado com um editor em um sistema Windows.

Um arquivo de texto do DOS tem, em comparação com um arquivo de texto Unix, um caractere de retorno de carro extra no final de cada linha, antes da nova linha. É por isso que sua expressão regular não corresponde, nenhuma linha realmente termina com me , eles terminam com me\r , onde \r é uma maneira comum de escrever um caractere de retorno de carro.

O remédio para isso é converter seu arquivo de texto em um arquivo de texto Unix usando, por exemplo, a ferramenta de conversão dos2unix , antes de usá-la em um sistema Unix.

    
por 01.11.2018 / 19:10
0

Em si, grep "me$" definitivamente está correto. Eu suspeito que suas linhas terminam com alguns caracteres adicionais que são difíceis de ver, como guias e espaços.

Experimente um destes:

# \t means tab
# [\t ] means a tab or a space
# [\t ]* means any number (including zero) of tabs and spaces.
#
grep "me[\t ]*$" sm.txt

Ou:

# [[:space:]] means any white space. I don't know if there are
# more than just space and tabs. This works with GNU grep only.
#
grep "me[[:space:]]*$" sm.txt
    
por 31.10.2018 / 10:50

Tags