Hier ist ein sedAnsatz:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
Erläuterung
Das -nunterdrückt die normale Ausgabe (normal ist das Drucken jeder Eingabezeile), so dass nur gedruckt wird, wenn Sie dazu aufgefordert werden. Das -Eermöglicht erweiterte reguläre Ausdrücke.
Das sedSkript verfügt über zwei Befehle, die beide den Substitutionsoperator ( s/original/replacement/) verwenden. Das 1s/.{11}(.{8}).*/\1/pwird nur in der 1. Zeile ausgeführt (das ist, was das 1stut) und wird mit den ersten 11 Zeichen der Zeile ( .{11}) übereinstimmen , dann erfasst es die nächsten 8 ( (.{8})die Klammern sind eine "Erfassungsgruppe") und dann alles andere bis das Ende der Zeile ( .*). All dies wird durch das ersetzt, was sich in der Erfassungsgruppe befand ( \1; wenn es eine zweite Erfassungsgruppe gäbe, wäre dies \2usw.). Schließlich bewirkt das pam Ende ( s/foo/bar/p), dass die Zeile gedruckt wird, nachdem die Ersetzung vorgenommen wurde. Dies führt dazu, dass nur die Ziel-8-Zeichen ausgegeben werden.
Der zweite Befehl ist dieselbe allgemeine Idee, außer dass er nur in der 3. Zeile ( 3s) ausgeführt wird und die 4 Zeichen ab der 4. Zeile beibehalten.
Sie könnten das Gleiche auch tun mit perl:
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
Erläuterung
Das -nebedeutet "Lesen Sie die Eingabedatei zeilenweise und wenden Sie das von -ejeder Zeile angegebene Skript an. Das Skript ist dieselbe Grundidee wie zuvor. Die $.Variable enthält die aktuelle Zeilennummer, daher prüfen wir, ob die Zeilennummer entweder 1oder 3und ist, wenn Führen Sie also die Ersetzung aus, andernfalls überspringen Sie sie. Daher printwird die nur für diese beiden Zeilen ausgeführt, da alle anderen übersprungen werden.
Das ist natürlich Perl, also TIMTOWTDI :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
Erläuterung
Hier -abedeutet das Mittel "jede Eingabezeile auf das durch angegebene Zeichen teilen -Fund als Array speichern @F. Da das angegebene Zeichen leer ist, wird jedes Zeichen der Eingabezeile als Element in @Fgespeichert. Dann drucken wir die Elemente 11-19 ( Arrays beginnen bei 0) für die 1. Zeile und 3-7 für die 3. Zeile zu zählen.