Saída de linha de comando de análise delimitada por sublinhado

2

Eu tenho alguns comandos cuja saída é assim:

some_command Current view: username_token1_token2_token3_4_token4_2

Como eu poderia analisar a parte "token3_4_token4_2" da string?

    
por Artem 14.01.2013 / 06:47

4 respostas

1

Aqui está em Perl:

perl -ne '$_ =~ s/([a-zA-Z0-9]+_){3}//; print $_;'

Por exemplo:

% echo "username_token1_token2_token3_4_token4_2" | perl -ne '$_ =~ s/([a-zA-Z0-9]+_){3}//; print $_;'
token3_4_token4_2

Funciona da seguinte forma:

Inicialmente, a string "username_token1_token2_token3_4_token4_2" é colocada na variável $_ .

pesquisar e substituir

s/....//

Corresponde a uma string_ (ou seja, parte do .... acima)

([a-zA-Z0-9]+_)

Corresponde 3 deles

{3}

substitui-os por nada (isto é, apaga)

//

imprima o que sobrou de $ _

print $_
    
por 14.01.2013 / 07:42
1
sed 's/^[^:]*:[^_]*_[^_]*_[^_]*_//'
    
por 14.01.2013 / 07:12
1

algumas soluções:

awk -F_ '{ print $5"_"$6"_"$7"_"$8 }'

.

awk '{ print gensub("^.*_([^_]+_[^_]+_[^_]+_[^_]+)$", "\1", "g") }'

.

awk '{ if (match($0, "_([^_]+_[^_]+_[^_]+_[^_]+)$", a)) print a[1] }'
    
por 14.01.2013 / 06:55
0

Apenas usando o bash:

alias some_command='echo "some_command Current view: username_token1_token2_token3_4_token4_2"'

read a b c < <(some_command)
token=$(IFS=_; set -- $c; shift 3; echo "$*")
echo $token

imprime

token3_4_token4_2

Eu usei uma substituição de processo para redirecionar a saída do comando para a instrução de leitura. Se eu tivesse usado um pipe, a leitura teria ocorrido em um subshell e a variável $ c não teria existido no shell pai.

    
por 14.01.2013 / 12:12