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]
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]
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]
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 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
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
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
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.