awk '/{/ {print $2}' FS='"'
Resultado
vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success
No entanto, isso seria melhor feito usando jq
Eu tenho uma 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
}
Eu preciso extrair apenas as URLs parciais ( vancouver/news/vancouvers-march-second-annual-success and vancouver/news/vancouver-voices
, por exemplo)
Basicamente estou chamando um comando via bash e, em seguida, canalizando-o para grep awk ou sed
Se eu usar grep ( | grep -o '".*": {'
), posso me aproximar. Eu acabo com a 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 caracteres especiais. Por exemplo, eu tentei | awk '\"(.*)\": {' --output='$1
'mas ele vomitou por causa das barras invertidas.
Qualquer sed ou awk guru pode me explicar como eu escapei dos personagens especiais?
awk '/{/ {print $2}' FS='"'
Resultado
vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success
No entanto, isso seria melhor feito usando jq
Solução com sed
:
sed -n '/{/s="\([^"]*\)".*==p'
grep
+ cut
:
grep '{' | cut -d'"' -f2
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 não-", não-/ caracteres, seguida por uma ou mais sequências consistindo de uma barra seguida pelo mesmo tipo de sequência que a inicial. Também é possível usar um caractere alfanumérico mais classe de caracteres para selecionar os componentes da URL.