Aqui está uma sed
abordagem:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
Explicação
A -n
saída normal suprime (normal é imprimir cada linha de entrada) para que ele imprime apenas quando solicitado. O -E
permite expressões regulares estendidas.
O sed
script possui dois comandos, ambos usando o operador de substituição ( s/original/replacement/
). Ele 1s/.{11}(.{8}).*/\1/p
será executado apenas na 1ª linha (é o que 1s
faz) e corresponderá aos 11 primeiros caracteres da linha ( .{11}
), depois capturará os próximos 8 ( (.{8})
os parênteses são um "grupo de captura") e depois todo o resto até o fim da linha ( .*
). Tudo isso é substituído pelo que estava no grupo de captura ( \1
; se houvesse um segundo grupo de captura, seria \2
etc.). Finalmente, p
no final ( s/foo/bar/p
) faz com que a linha seja impressa após a substituição. Isso resulta apenas na saída dos 8 caracteres de destino.
O segundo comando é a mesma idéia geral, exceto que ele será executado apenas na 3ª linha ( 3s
) e manterá os 4 caracteres começando no 4º.
Você também pode fazer o mesmo com perl
:
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
Explicação
Os -ne
meios "lêem o arquivo de entrada linha por linha e aplicam o script fornecido por -e
cada linha. O script é a mesma ideia básica de antes. A $.
variável mantém o número da linha atual, portanto verificamos se o número da linha é 1
ou 3
e, se portanto, execute a substituição, caso contrário, pule.Portanto, print
ele será executado apenas para essas duas linhas, pois todas as outras serão ignoradas.
Claro, esse é o Perl, então o TIMTOWTDI :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
Explicação
Aqui, os -a
meios "dividem cada linha de entrada no caractere fornecido por -F
e salvam como a matriz @F
. Como o caractere fornecido está vazio, isso salvará cada caractere da linha de entrada como um elemento @F
. Em seguida, imprimimos os elementos 11-19 ( matrizes começam a contar em 0
) para a 1ª linha e 3-7 na 3ª.