Como grep coluna após segunda tubulação

1

Exemplo:

3|100|[email protected]|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|

Visualização esperada após o grep:

[email protected]
    
por Kalin Borisov 11.10.2012 / 13:57

5 respostas

7

Use cut :

$ echo '3|100|[email protected]|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|' |\
cut -d'|' -f3
[email protected]
    
por 11.10.2012 / 14:00
4

Talvez o awk seja mais adequado para esse uso:

awk 'BEGIN { FS = "|" } ; { print $3 }'

Se você tiver que extrair mais de um campo de tal entrada, acho que é mais fácil usar o awk.

(OFF: desculpe-me se eu apontei em uma direção awk-ward )

    
por 11.10.2012 / 14:05
3

Por que grep? Use cut

echo "3|100|[email protected]|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|" | cut -d '|' -f 3
    
por 11.10.2012 / 14:01
1

Imagine que seu conteúdo esteja presente nesse arquivo file1

[max@localhost ~]$ cat file1 3|100|[email protected]|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|

Para cortar o campo third use este comando

[max@localhost ~]$ cut -d "|" -f3 file1

[email protected]

aqui

-d : Specifies to use character | as delimiter

-f1 : Print first field, if you want print second field use -f2, third field use -f3, and so on...

suponha que file1 conteúdo seja assim

[max@localhost ~]$ cat file1

root:x:0:0:root:/root:/bin/bash

Em seguida, temos que usar : como delimitador como este

Para cortar first campo use f1

[max@localhost ~]$ cut -d ":" -f1 file1
root

Para cortar second campo use f2

[max@localhost ~]$ cut -d ":" -f2 file1
x

Para cortar third campo use f3

[max@localhost ~]$ cut -d ":" -f3 file1
0
    
por 13.10.2012 / 11:59
1

Apenas por diversão, veja como você pode fazer isso com grep e tr :

<infile grep -Eo '^([^|]+\|){3}' | grep -Eo '[^|]+\|$' | tr -d '|'

O primeiro regex agarra os primeiros três campos delimitados por tubos. O segundo grep seleciona o último campo e tr remove o delimitador remanescente.

    
por 16.10.2012 / 01:51