GNU/Linux >> Belajar Linux >  >> Ubuntu

Tampilkan Semua Baris Sebelum Pertandingan?

Saya ingin menampilkan semua baris sebelum pertandingan, tidak hanya 10, atau 7, atau 14 misalnya, seperti yang dijelaskan di Bagaimana cara mengambil baris sebelum/sesudah grep menghasilkan bash?.

Bagaimana saya bisa melakukannya? Tidak masalah apakah baris yang cocok disertakan atau tidak.

Misalnya, alih-alih:

... | grep -B 10 -- "foo"

Saya ingin:

... | grep -B -- "foo"

Tapi kode terakhir ini tidak berfungsi.

Jawaban yang Diterima:

  • Termasuk pertandingannya,

    sed '/foo/q' file
    

    Lebih baik q uit sed segera setelah kecocokan ditemukan, jika tidak sed akan terus membaca file dan membuang waktu Anda, yang akan sangat berarti untuk file besar.

  • Tidak termasuk pertandingan,

    sed -n '/foo/q;p' file
    

    -n flag berarti hanya garis yang mencapai p perintah akan dicetak. Sejak foo baris memicu q uit action, itu tidak mencapai p dan karenanya tidak dicetak.

    • Jika Anda sed adalah milik GNU, ini dapat disederhanakan menjadi

      sed '/foo/Q' file
      

Referensi

  1. /foo/ — Alamat
  2. q , p — Perintah yang sering digunakan
  3. Q — GNU Sed perintah yang diperluas
  4. -n — Opsi baris perintah

Ubuntu
  1. Cara Menghapus Semua Baris File di Vim

  2. sed untuk memasukkan hanya pada pertandingan pertama

  3. grep hanya cocok dengan garis dalam rentang yang ditentukan

  1. Kembalikan kode sed jika tidak cocok

  2. Hapus baris kosong menggunakan sed

  3. sed - menyisipkan baris setelah baris X setelah pertandingan

  1. Menghapus Semua Komentar C Dengan Sed?

  2. Bagaimana Menyembunyikan Semua Windows Dan Menampilkan Desktop Dengan Cepat?

  3. SED ganti di beberapa baris