sed ou grep regex problema

1

Estou com dificuldades para usar o sed ou o grep para extrair um texto de uma string.

Uma string de exemplo que estou usando é:

|a Milton, John, |d 1608-1674.

Eu posso extrair 'John' usando sed e alguns conselhos nos fóruns:

sed 's/[^,]*,\([^,]*\),.*//'

Mas eu estou lutando com 'Milton'.

    
por Michael Riordan 08.12.2017 / 18:05

1 resposta

1

Supondo que haja o |a no início da linha, vamos alterar esse padrão um pouco:

$ echo '|a Milton, John, |d 1608-1674.' | sed -E 's/^\|a ([^,]*), *([^,]*),.*//'
Milton

sed -E usa expressões regulares estendidas, portanto, podemos agrupar com (...) sem barras invertidas. Em seguida, combinamos o |a e o espaço iniciais, escolhemos tudo até a próxima vírgula para um grupo ([^,]*), , ignoramos espaços com ␣* e escolhemos outro grupo da mesma maneira que o primeiro. O ,.* come o restante da linha e podemos substituí-la pelo primeiro grupo (aqui Milton ) ou pelo segundo grupo ( John ).

É claro que, se o |a estiver lá para nos informar o que esse campo específico contém e os campos podem estar em outra ordem (como |d ... |a ... ), precisaríamos de algo diferente.

    
por 08.12.2017 / 18:16