Oto sedpodejście:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
Wyjaśnienie
-nWyjście normalne Pomija (normalne jest, aby wydrukować każdą linię wejściowego), tak, że tylko drukuje, gdy kazano. -EUmożliwia rozszerzonych wyrażeń regularnych.
sedSkrypt ma dwa polecenia, zarówno za pomocą operatora podstawienia ( s/original/replacement/). 1s/.{11}(.{8}).*/\1/pBędzie działać tylko na 1 linię (to właśnie 1srobi), i będzie pasował do 1. 11 znaków w wierszu ( .{11}), to rejestruje kolejne 8 ((.{8}) , nawiasy są „grupa capture”), a następnie wszystko inne, aż koniec linii ( .*). Wszystko to zostaje zastąpione tym, co było w grupie przechwytywania ( \1; gdyby istniała druga grupa przechwytywania, byłoby to \2itd.). Wreszcie, pna końcu ( s/foo/bar/p) powoduje wydrukowanie wiersza po dokonaniu podstawienia. Powoduje to, że wyprowadzane są tylko docelowe 8 znaków.
Drugie polecenie to ten sam ogólny pomysł, z tą różnicą, że będzie działało tylko na 3. linii ( 3s) i zachowa 4 znaki począwszy od 4. linii.
Możesz także zrobić to samo perl :
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
Wyjaśnienie
Te -neśrodki „czytać wiersz pliku wejściowego po linii i zastosować skrypt podany przez -edo każdej linii. Scenariusz jest taki sam podstawowy pomysł, jak wcześniej. Na $.zmienna posiada aktualny numer wiersza więc sprawdzić, czy numer linii jest albo 1czy 3, a jeśli więc uruchom podstawienie, w przeciwnym razie pomiń. Dlategoprint będzie uruchamiany tylko dla tych dwóch linii, ponieważ wszystkie inne zostaną pominięte.
Oczywiście jest to Perl, więc TIMTOWTDI :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
Wyjaśnienie
-aOznacza to, że „podziel każdą linię wejściową na znak podany przez -Fi zapisz jako tablicę @F. Ponieważ podany znak jest pusty, spowoduje to zapisanie każdego znaku linii wejściowej jako elementu @F. Następnie drukujemy elementy 11–19 ( tablice zaczynają się liczyć od 0) dla 1. linii i 3-7 dla 3. linii.