Recorte um arquivo delimitado em um número com um ou mais dígitos

3

Estou procurando uma maneira de extrair a primeira coluna de um arquivo de texto que não tenha delimitadores específicos, exceto os dígitos arbitrários que iniciam a próxima coluna. Exemplo:

John Smith 1234 Main Street
Amy Brown and Sally Williams 9 Drury Lane
Sunny's 1000 Brown Avenue

A saída esperada seria:

John Smith
Amy Brown and Sally Williams
Sunny's

Parece que cut não suporta funcionalidades como cut file.txt -d {0..9} -f 1

As soluções podem usar qualquer utilitário unix padrão.

    
por mttpgn 04.09.2017 / 19:17

4 respostas

8
$ awk -F'[0-9]' '{ print $1 }' file
John Smith
Amy Brown and Sally Williams
Sunny's

Com -F'[0-9]' , dizemos que os dígitos devem ser considerados separadores de campo nos dados de entrada e, com print $1 , emitimos o campo separado por primeiro dígito.

Altere -F'[0-9]' para -F' *[0-9]' para também se livrar de qualquer espaço antes do dígito.

    
por 04.09.2017 / 19:34
5

E uma solução sed :

echo "John Smith 1234 Main Street
Amy Brown and Sally Williams 9 Drury Lane
Sunny's 1000 Brown Avenue" | sed 's/ *[0-9].*$//'
John Smith 
Amy Brown and Sally Williams 
Sunny's 
    
por 04.09.2017 / 19:40
1

GNU grep:

grep -Po '.*?(?=\s*\d)' file
    
por 05.09.2017 / 15:30
1

Com o GNU grep

grep -o '^[^[:digit:]]*' file

(note que ele não produzirá nada para linhas como 123foo , que são linhas onde a parte esquerda dos dígitos está vazia).

    
por 05.09.2017 / 05:08