Ecco un sedapproccio:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
Spiegazione
L' -nuscita normale sopprime (normale è quello di stampare ogni linea di ingresso) in modo che la stampa solo quando ha detto di. L' -Eabilita le espressioni regolari estese.
Lo sedscript ha due comandi, entrambi utilizzano l'operatore di sostituzione ( s/original/replacement/). L' 1s/.{11}(.{8}).*/\1/pverrà eseguito solo sulla linea 1 (che è quello che la 1sfa), e corrisponderà al primo 11 caratteri della linea ( .{11}), quindi cattura i prossimi 8 ( (.{8})le parentesi sono un "gruppo di cattura") e poi tutto il resto fino a quando la fine della linea ( .*). Tutto questo viene sostituito con qualsiasi cosa fosse nel gruppo di acquisizione ( \1; se ci fosse un secondo gruppo di acquisizione, sarebbe \2ecc.). Infine, palla fine ( s/foo/bar/p) fa sì che la riga venga stampata dopo aver effettuato la sostituzione. Ciò si traduce in un output di soli 8 caratteri target.
Il secondo comando è la stessa idea generale, tranne per il fatto che verrà eseguito solo sulla 3a riga ( 3s) e manterrà i 4 caratteri a partire dalla 4a.
Puoi anche fare la stessa cosa con perl:
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
Spiegazione
Il -nemezzo "legge il file di input riga per riga e applica lo script fornito da -eciascuna riga. Lo script è la stessa idea di base di prima. La $.variabile contiene il numero di riga corrente, quindi controlliamo se il numero di riga è o 1o 3e, se quindi, esegui la sostituzione, altrimenti salta. Pertanto printverrà eseguito solo per quelle due righe poiché tutte le altre verranno ignorate.
Certo, questo è Perl, quindi TIMTOWTDI :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
Spiegazione
Qui, i -amezzi "suddividono ogni riga di input sul carattere dato da -Fe salvano come matrice @F. Poiché il carattere fornito è vuoto, ciò salverà ogni carattere della riga di input come elemento in @F. Quindi, stampiamo gli elementi 11-19 ( le matrici iniziano a contare da 0) per la 1a riga e 3-7 per la 3a.