Ini membalikkan file baris demi baris.
sed '1! G; h; $! d' file
Pertama, sed
memiliki ruang tahan dan ruang pola . Kita harus membedakan antara mereka sebelum berkonsentrasi pada perintah khusus itu.
Ketika sed
membaca baris baru, itu dimuat ke dalam ruang pola. Oleh karena itu, ruang itu ditimpa setiap kali baris baru diproses. Di sisi lain, ruang penahanan konsisten untuk seluruh pemrosesan dan nilai-nilai dapat disimpan di sana untuk penggunaan selanjutnya.
Untuk perintah:
Ada 3 perintah dalam pernyataan ini: 1!G
, h
dan$!d
1!G
berarti bahwa G
perintah dijalankan pada setiap baris kecuali yang pertama (yang !
meniadakan 1
). G
berarti menambahkan apa yang ada di ruang pegang ke dalam ruang pola.
h
berlaku untuk setiap baris. Ini menyalin ruang pola ke ruang pegang (dan menimpanya).
$!d
berlaku untuk setiap baris kecuali yang terakhir ( $
mewakili baris terakhir, !
meniadakannya). d
adalah perintah untuk menghapus garis (pola spasi).
- Sekarang, ketika baris pertama dibaca,
sed
jalankan h
perintah. Baris pertama disalin ke ruang tunggu. Kemudian dihapus, karena cocok dengan $!
kondisi. sed
melanjutkan dengan baris kedua.
- Baris kedua cocok dengan kondisi
1!
(itu bukan baris pertama), dan jadi ruang penahanan (yang memiliki baris pertama) ditambahkan ke ruang pola (yang memiliki baris kedua). Setelah itu, dalam ruang pola, sekarang ada baris kedua diikuti oleh baris pertama, dibatasi oleh baris baru. Sekarang, h
perintah berlaku (seperti di setiap baris); semua yang ada dalam pola ruang disalin ke ruang tunggu. Pernyataan ketiga ( $!d
) berlaku: Baris dihapus dari ruang pola.
- Langkah 2 sekarang dilakukan dengan semua lini. Kami melompat ke baris terakhir.
- Di baris terakhir (
$
) hampir semua Langkah 2 dilakukan, tetapi bukan bagian hapus ( d
). sed
, ketika dipanggil tanpa -n
, mencetak ruang pola secara otomatis di akhir pemrosesan untuk setiap jalur input. Jadi, ketika tidak dihapus, ruang pola dicetak. Ini sekarang berisi semua baris dalam urutan terbalik .