Pega várias partes da linha de string

0

Eu sou novo no shell script. Esta é apenas uma variação de algumas questões anteriores, mas ainda não consigo encontrar respostas. Eu tenho o seguinte arquivo txt (uma linha e sem espaço):

;100=Raspberry;101=Apple;102=Orange;103=Kiwi;104=grape;

Eu gosto de escolher qualquer coisa com 101=* ou 103=* como saída. Portanto, a saída precisa se parecer com o seguinte:

;101=Apple;103=Kiwi

Eu estava tentando escrever um comando modificando

grep -o -m 1 ';101=.*;\|;103=.*' file.txt

Mas escolhe tudo depois de 101=.* . Eu sei que é o que os comandos dizem, mas ainda não tenho certeza de como mudar isso. Eu estou usando o Ubuntu 16.

    
por midtownguru 11.01.2018 / 06:29

2 respostas

2

.* tenta corresponder o maior número possível de caracteres, e é por isso que você recebe o restante da linha. Então, em vez de . (qualquer caractere), você precisa usar [^;] (qualquer caractere, exceto o ponto-e-vírgula):

grep -o ';101=[^;]*\|;103=[^;]*'

Não tenho certeza do que tentei alcançar com -m 1 em um único liner. De qualquer forma, você precisa combinar sua saída em uma linha para obter o resultado desejado. Mas aposto que você pode descobrir como fazer isso sozinho (no final, é o seu exercício, não o nosso).

    
por 11.01.2018 / 07:06
0

Eu usei o comando awk abaixo para obter o mesmo

 awk -F ";" '{print ";"$3";"$5}' filename

saída

;101=Apple;103=Kiwi
    
por 11.01.2018 / 20:03