Precisa sedar saída awk ou grep para extrair strings


3

Eu tenho saída que se parece com isso:

"vancouver/news/vancouver-voices": {
    "status": 0,
    "time": 0,
    "timestamp": 1371298701
},
"vancouver/news/vancouvers-march-second-annual-success": {
    "status": 0,
    "time": 0,
    "timestamp": 1371298701
}

Preciso extrair apenas os URLs parciais ( vancouver/news/vancouvers-march-second-annual-success and vancouver/news/vancouver-voicespor exemplo)

Basicamente, estou chamando um comando via bash e depois canalizando-o para grep awk ou sed

Se eu usar grep ( | grep -o '".*": {'), posso me aproximar. Acabo com saída como:

"vancouver/news/vancouver-voices": {
"vancouver/news/vancouvers-march-second-annual-success": {

Eu suspeito que eu preciso usar sed ou awk embora. Eu tentei várias coisas, mas acho que preciso escapar de alguns dos personagens especiais. Por exemplo, eu tentei | awk '\"(.*)\": {' --output='$1', mas vomita por causa das barras invertidas.

Qualquer guru sed ou awk por aí pode me dar uma dica de como posso escapar adequadamente dos personagens especiais?


Isso parece funcionar, embora eu deva imaginar que há uma maneira mais elegante de fazer isso: | grep -o '". *": {' | sed 's / (^ "\ |": {$) // g'. Se alguém tiver alguma sugestão melhor, por favor me avise.
Brad

Respostas:


2
awk '/{/ {print $2}' FS='"'

Resultado

vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success

No entanto, isso seria melhor feito usando jq


1

Solução com sed:

sed -n '/{/s="\([^"]*\)".*=\1=p'

grep+ cut:

grep '{' | cut -d'"' -f2

0

Você ainda pode usar o grep:

| grep -o '[^"/]\+\(/[^"/]\+\)\+'

rendimentos:

vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success

Ele procura por uma sequência inicial de caracteres não ", não / /, seguida por uma ou mais sequências que consistem em uma barra seguida pelo mesmo tipo de sequência que a inicial. Também é possível usar uma classe de caracteres alfanuméricos mais traço para selecione os componentes de URL.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.