Aquí hay un sed
enfoque:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
Explicación
El -n
suprime la salida normal (normal es imprimir cada línea de entrada) de forma que sólo se imprime cuando se le dijo a. El -E
permite expresiones regulares extendidas.
El sed
script tiene dos comandos, ambos utilizando el operador de sustitución ( s/original/replacement/
). El 1s/.{11}(.{8}).*/\1/p
solo se ejecutará en la primera línea (eso es lo que 1s
hace), y coincidirá con los primeros 11 caracteres de la línea ( .{11}
), luego capturará los siguientes 8 ( (.{8})
, los paréntesis son un "grupo de captura") y luego todo lo demás hasta El final de la línea ( .*
). Todo esto se reemplaza con lo que haya en el grupo de captura ( \1
; si hubiera un segundo grupo de captura, sería \2
etc.). Finalmente, p
al final ( s/foo/bar/p
) hace que la línea se imprima después de que se ha realizado la sustitución. Esto da como resultado que solo se muestren los 8 caracteres de destino.
El segundo comando es la misma idea general, excepto que solo se ejecutará en la tercera línea ( 3s
) y mantendrá los 4 caracteres a partir de la cuarta.
También podría hacer lo mismo con perl
:
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
Explicación
El -ne
medio "lee el archivo de entrada línea por línea y aplica la secuencia de comandos dada por -e
cada línea. La secuencia de comandos es la misma idea básica que antes. La $.
variable contiene el número de línea actual, por lo que verificamos si el número de línea es 1
o 3
y, si entonces, ejecute la sustitución, de lo contrario, omita. Por lo tanto print
, solo se ejecutará para esas dos líneas, ya que todas las demás se omitirán.
Por supuesto, esto es Perl, entonces TIMTOWTDI :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
Explicación
Aquí, los -a
medios "dividen cada línea de entrada en el carácter dado por -F
y guardan como la matriz @F
. Dado que el carácter dado está vacío, esto guardará cada carácter de la línea de entrada como un elemento @F
. Luego, imprimimos los elementos 11-19 ( las matrices comienzan a contar en 0
) para la primera línea y 3-7 para la tercera.