Um caminho seria:
... |sed -r 's/^"[^"]*" *"([^"]*)"$//'
Andrew Spokes
outro com:
sed -r 's/(([^"]*"){3})//; s/"//'
ou:
sed -r 's/.*"(.*)"$//'
Este [^"]
corresponde a qualquer caractere único que não seja "
.
Eu tenho uma saída grep de um arquivo assim:
"name" "Andrew Spokes"
Eu quero extrair o nome canalizando a saída do grep através de sed
.
Meu resultado esperado seria:
Andrew Spokes
Exijo que todo o espaço em branco que não esteja entre as aspas seja removido também.
Um caminho seria:
... |sed -r 's/^"[^"]*" *"([^"]*)"$//'
Andrew Spokes
outro com:
sed -r 's/(([^"]*"){3})//; s/"//'
ou:
sed -r 's/.*"(.*)"$//'
Este [^"]
corresponde a qualquer caractere único que não seja "
.
A expressão a seguir funciona para o GNU sed:
sed -E 's/^"name"[[:space:]]*"([^"]+)"$//'
Isso funciona criando uma expressão regular que corresponda à linha inteira, bem como correspondendo a uma subexpressão na qual a parte do nome desejada é encontrada. Esta é a seção entre parênteses, que é uma seqüência de caracteres que não são aspas duplas. Todo o regex correspondido é substituído pela subexpressão, referenciada como no final da expressão.
Como um exemplo de como isso funciona:
$ # Generate lines in the expected format
$ echo $'"name" "Andrew Spokes"\n"name" "ABC"\n"name" "Foo Bar Baz"'
"name" "Andrew Spokes"
"name" "ABC"
"name" "Foo Bar Baz"
$ # Pipe the same lines to the sed command
$ echo $'"name" "Andrew Spokes"\n"name" "ABC"\n"name" "Foo Bar Baz"' | sed -E 's/^"name"[[:space:]]*"([^"]+)"$//'
Andrew Spokes
ABC
Foo Bar Baz
Se a sua experiência com as expressões regulares do GNU é limitada, pode ajudar a procurar as construções usadas no regex acima, no Manual do GNU sed . Se usar um sabor diferente de sed, os detalhes podem ser ligeiramente diferentes. Um texto explicativo é a opção -E
, isso permite expressões regulares "estendidas". No GNU sed isso tem caracteres especiais, como parênteses e barras invertidas, assumindo o significado de criar subexpressões e referências de volta sem fugir delas. Outro é o uso de ^
e $
para exigir que o regex completo coincida no início e no final da linha.
A outra chamada é simplesmente que a expressão sed usada faz suposições sobre a uniformidade de todas as linhas de entrada. Ajustes serão necessários se houver mais variação na entrada.
Tags grep text-processing sed