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?

Brad
fonte
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

Steven Penny
fonte
1

Solução com sed:

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

grep+ cut:

grep '{' | cut -d'"' -f2
pressa
fonte
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.

Firstrock
fonte