Rumah  >  Artikel  >  Tutorial sistem  >  Ringkasan komprehensif: Penjelasan terperinci tentang pemprosesan berbilang talian sed Linux

Ringkasan komprehensif: Penjelasan terperinci tentang pemprosesan berbilang talian sed Linux

WBOY
WBOYke hadapan
2024-01-05 16:11:491096semak imbas

Dalam keadaan biasa, sed membaca baris untuk diproses ke dalam ruang corak, dan arahan dalam skrip memproses baris satu demi satu sehingga skrip dilaksanakan, kemudian baris keluaran, dan ruang corak kosong; Dengan tindakan tadi, baris baharu dalam fail dibaca sehingga fail diproses sepenuhnya. Walau bagaimanapun, pelbagai sebab, seperti pengguna yang mengharapkan arahan tertentu dalam skrip akan dilaksanakan dalam keadaan tertentu, atau berharap ruang corak akan dikekalkan untuk pemprosesan seterusnya, boleh menyebabkan sed tidak mengikut arahan semasa memproses fail keluar dari proses biasa. Pada masa ini, sed telah menyediakan beberapa arahan lanjutan untuk memenuhi keperluan pengguna. Jika anda ingin mempelajari arahan lanjutan sed, anda mesti terlebih dahulu memahami dua kawasan cache berikut:

1. Definisi ruang corak: Ruang corak ialah kawasan penimbal yang menyimpan apa yang baru dibaca oleh sed dari hujung input.
2. Definisi ruang tahan: Ruang tahan digunakan untuk menyimpan data sementara semasa memproses data ruang corak.

Terdapat juga beberapa parameter arahan:

g: Salin kandungan dalam ruang tahan ke ruang corak, dan kosongkan kandungan asal dalam ruang corak
G: Tambahkan kandungan dalam ruang tahan pada ruang pola
h: Salin kandungan dalam ruang corak ke ruang tahan, dan kandungan dalam ruang tahan asal dikosongkan
H: Tambahkan kandungan dalam ruang corak pada ruang tahan
x: Tukar kandungan ruang corak dan tahan ruang

Sebagai contoh, kami ingin membalikkan kandungan fail adalah seperti berikut:

[qiu.li@l-tdata1.tkt.cn6 ~]$ cat tmp 
1-line
2-line
3-line

Lakukan arahan berikut:

[qiu.li@l-tdata1.tkt.cn6 ~]$ sed '2,$G;h;$!d' tmp
3-line
2-line
1-line

Mari kita fahami secara beransur-ansur proses pelaksanaan di atas

1. Mari kita analisa tiga arahan berikut:

  • 2,$G: Jalankan arahan G dari baris kedua hingga baris terakhir
  • h: Laksanakan arahan h
  • $!d: Padam semua baris kecuali baris terakhir

2. Operasi khusus

  1. Imbas ke baris pertama
    1. Masukkan 1 baris ke dalam ruang corak; pada masa ini, ruang corak masih 1 baris;
    2. Laksanakan arahan h secara langsung, ruang simpanan sementara ialah 1 baris pada masa ini
    3. Laksanakan arahan d untuk memadam satu-satunya baris data dalam ruang corak Selepas pemadaman, ruang corak kosong
  2. Imbas ke baris kedua
    1. Letak 2 baris ke dalam ruang corak
    2. Laksanakan arahan G untuk menambah 1-baris ruang sementara ke belakang 2-baris ruang corak Pada masa ini, ruang corak ialah 2-linen1-baris;
    3. Laksanakan arahan h, kandungan ruang simpanan sementara ialah 2-linen1-baris
    4. Laksanakan arahan d dan ruang corak akan dikosongkan
  3. Imbas ke baris ketiga
    1. Letak 3 baris ke dalam ruang corak,
    2. Lakukan arahan G untuk menambah 2-linen1-baris dalam ruang sementara ke belakang 3-baris dalam ruang corak Pada masa ini, ruang corak ialah 3-linen2-linen1-baris;
    3. Melaksanakan arahan h, kandungan ruang simpanan sementara ialah 3-linen2-linen1-baris
    4. Jangan laksana $!d;
  4. Keluaran terus 3-linen2-linen1-line

Sudah tentu, arahan: sed '1!G;h;$!d' tmp juga boleh mempunyai kesan ini.

Atas ialah kandungan terperinci Ringkasan komprehensif: Penjelasan terperinci tentang pemprosesan berbilang talian sed Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam