Inilah sedpendekatannya:
$ sed -nE '1s/.{11}(.{8}).*/\1/p; 3s/.{3}(.{4}).*/\1/p' file
Ethernet
t6 a
Penjelasan
The -nMenekan output normal (normal adalah untuk mencetak setiap baris input) sehingga hanya mencetak ketika diberitahu untuk. The -Ememungkinkan ekspresi reguler diperpanjang.
The sedScript memiliki dua perintah, baik menggunakan operator substitusi ( s/original/replacement/). Hanya 1s/.{11}(.{8}).*/\1/pakan berjalan pada baris 1 (itulah yang 1sdilakukan), dan akan cocok dengan 11 karakter 1 baris ( .{11}), kemudian menangkap 8 berikutnya ( (.{8}), tanda kurung adalah "grup tangkap") dan kemudian semuanya sampai akhir baris ( .*). Semua ini diganti dengan apa pun yang ada di kelompok tangkap ( \1; jika ada kelompok tangkap kedua, itu akan menjadi \2dll.). Akhirnya, ppada bagian akhir ( s/foo/bar/p) menyebabkan garis untuk dicetak setelah substitusi dibuat. Ini menghasilkan hanya 8 karakter target yang dihasilkan.
Perintah kedua adalah ide umum yang sama kecuali bahwa itu hanya akan berjalan pada baris ke-3 ( 3s) dan akan membuat 4 karakter dimulai dari ke-4.
Anda juga dapat melakukan hal yang sama dengan perl:
$ perl -ne 'if($.==1){s/.{11}(.{8}).*/\1/}
elsif($.==3){s/.{3}(.{4}).*/\1/}
else{next}; print; ' file
Ethernet
t6 a
Penjelasan
The -neberarti "membaca file baris masukan demi baris dan menerapkan script yang diberikan oleh -emasing-masing baris. Script adalah ide dasar yang sama seperti sebelumnya. The $.variabel memegang nomor baris saat ini sehingga kami memeriksa apakah nomor baris adalah baik 1atau 3dan, jika jadi, jalankan substitusi, lewati saja. Karena itu printhanya akan dijalankan untuk dua baris karena semua yang lain akan dilewati.
Tentu saja, ini Perl, jadi TIMTOWTDI :
$ perl -F"" -lane '$. == 1 && print @F[11..19]; $.==3 && print @F[3..6]' file
Ethernet
t6 a
Penjelasan
Di sini, -aberarti "pisahkan setiap baris input pada karakter yang diberikan oleh -Fdan simpan sebagai array @F. Karena karakter yang diberikan kosong, ini akan menyimpan setiap karakter dari garis input sebagai elemen @F. Kemudian, kita mencetak elemen 11-19 ( array mulai menghitung pada 0) untuk baris pertama dan 3-7 untuk baris ketiga.