Pendekatan naif menggunakan awk:
~$ awk '{a[NR]=$0}END{print a[1];print a[NR];for(i=2;i<NR;i++){print a[i]}}' f
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
Anda menyimpan setiap baris dalam aarray, lalu mencetak array dalam urutan yang Anda inginkan (baris 1, baris terakhir ( NR) dan dari 2 hingga kedua dari belakang.
Menggunakan kombinasi kepala / ekor dan sed:
~$ head -1 f;tail -1 f;sed '1d;$d' f
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
Cetak baris pertama, terakhir, dan dengan sed hapus 1 dan terakhir.
Dengan sed saja, saya hanya dapat menemukan perintah ini. Saya yakin ada cara yang lebih baik:
~$ sed '${p;x;s/^\n//;p};2,${H;d}' f
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
Jika ini adalah baris pertama, cetaklah (default).
Dari baris kedua, letakkan di buffer terus ( H), dan hapus dari ruang pola ( d). Dan jika itu adalah baris terakhir, cetaklah ( p), lalu dapatkan buffer penahan ( x), hapus baris kosong ( s/^\n//) dan cetaklah ( p).
awksolusi, apakah Andasedpenggemar berat atau mungkin Anda menulissed? ;-)