GNU/Linux >> Belajar Linux >  >> Linux

ekstrak baris dari bawah hingga regex cocok

Ini terasa agak konyol, tapi:

$ tac file.txt |sed -e '/^virt-top/q' |tac
virt-top time  11:25:17 Host foo.example.com x86_64 32/32CPU 1200MHz 65501MB
   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM   TIME    NAME
    1 R    0    0    0    0  0.6 12.0  96:02:53 instance-0000036f
    2 R    0    0    0    0  0.2 12.0  95:44:08 instance-00000372

GNU tac membalikkan file (banyak sistem non-GNU memiliki tail -r sebagai gantinya), sed mengambil baris sampai baris pertama yang dimulai dengan virt-top . Anda dapat menambahkan sed 1,2d atau tail -n +3 untuk menghapus tajuk.

Atau di awk:

$ awk '/^virt-top/ { a = "" } { a = a $0 ORS } END {printf "%s", a}' file.txt 
virt-top time  11:25:17 Host foo.example.com x86_64 32/32CPU 1200MHz 65501MB
   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM   TIME    NAME
    1 R    0    0    0    0  0.6 12.0  96:02:53 instance-0000036f
    2 R    0    0    0    0  0.2 12.0  95:44:08 instance-00000372

Itu hanya mengumpulkan semua baris ke variabel, dan menghapus variabel itu pada baris yang dimulai dengan virt-top .

Jika file sangat besar, tac +sed solusinya pasti lebih cepat karena hanya perlu membaca bagian akhir file sedangkan awk solusi membaca file lengkap dari atas.


Dengan ed Anda dapat melakukan pencarian regex ke atas menggunakan ?pattern? sebagai pengganti /pattern/ biasa (yang mencari dari atas posisi saat ini). Jadi misalnya:

$ printf '%s\n' '?ID?+1,$p' q | ed -s file.txt
    1 R    0    0    0    0  0.6 12.0  96:02:53 instance-0000036f
    2 R    0    0    0    0  0.2 12.0  95:44:08 instance-00000372

Jika input Anda memiliki jumlah blok yang tetap, Anda juga dapat melakukan sesuatu seperti:

awk '/^virt-top/ && ++n == 2, 0' <your-file

Untuk menampilkan baris dari 2 kemunculan virt-top ke akhir file (0 artinya false , berarti akhir dari pertama itu ,terakhir rentang tidak pernah ditemukan).


Linux
  1. Ekstrak File Dari Gambar Docker?

  2. Awk Dari Baris Yang Berbeda?

  3. Hitung Baris Dalam File?

  1. Membaca Baris Dari File Dengan Bash:Untuk Vs. Ketika?

  2. Bagaimana cara mengekstrak satu potongan byte dari dalam file?

  3. Daftar baris hanya dari satu file di DIFF

  1. Hapus N baris pertama dari file log aktif

  2. Bagaimana cara mengekstrak teks dari file besar, mulai dari kemunculan pertama string?

  3. Gambarlah sejumlah garis secara acak dari file data