GNU/Linux >> Belajar Linux >  >> Linux

Cara grep bagian file di bash shell

grep tidak cocok untuk tugas ini, Anda perlu menggunakan satu alat "naik":

sed -n '/^B/,/^E/p' infile

Keluaran:

B
C
D
E
B
C
E

Sehubungan dengan persyaratan ke-N, menurut saya paling mudah jika Anda memajukan satu alat lagi "ke atas", yaitu awk:

awk '/^B/ { f = 1; n++ } f && n == wanted; /^E/ { f = 0 }' wanted=2 infile

Keluaran:

B
C
E

Bendera f akan disetel saat /^B/ ditemukan dan tidak disetel saat /^E/ terjadi, sama seperti notasi sed bekerja. n menghitung berapa banyak blok yang telah berlalu dan kapan f == 1 && n == wanted benar, blok default akan dieksekusi ({ print $0 } ).


sed @Thor perintah tidak dapat dikalahkan, tetapi dengan perl berikut skrip Saya mencoba menjawab bagian dari pertanyaan Anda dalam tanda kurung:"... kejadian (ke-N) ...".

Penggunaan:

./script <start-regex> <end-regex> [N]

Contoh dengan file dalam pertanyaan Anda:

$ ./script "B" "E" < examplefile
B
C
D
E
B
C
E

$ ./script "B" "E" 2 < examplefile
B
C
D
E
F
G
B
C
E

Tidak ada pemeriksaan kesalahan atau apa pun dan skripnya tidak serakah, yaitu dari A B C D E E F hanya B C D E akan diambil dengan N=1.

#!/usr/bin/perl

if ($ARGV[2] != "") { $n = $ARGV[2] } else { $n = 1 }
$begin_str = $ARGV[0];
$end_str = $ARGV[1];

while(<STDIN>) {
  if($_ =~ $begin_str) { $flag=1 }             # beginning of match, set flag    
  if($_ =~ $end_str && $flag eq 1) { $i++ }    # i-th occurence of end string

  if($i eq $n) {                               # end of match after n occurences of end string
    $flag=2;
    $i=0; 
  }

  if ($flag ge 1) {                            # append currrent line to matching part
    $out.=$_;
  }

  if($flag eq 2) {                             # after detection of end of match, print complete match
    print $out;
    # print "---\n";                           # separator after a match
    $out="";
    $flag=0;
  }

}

Linux
  1. Bagaimana Membuat File Sementara Di Shell Script?

  2. Bagaimana Cara Mengubah Cron Shell (sh ke Bash)?

  3. Grep Bagaimana Cara Menekan Tampilan File yang Tidak Cocok?

  1. Bagaimana Membandingkan String di Bash Shell Scripting

  2. Bagaimana cara memeriksa syslog di Bash di Linux?

  3. Bagaimana cara memeriksa apakah suatu file kosong di Bash?

  1. Cara memasukkan file dalam skrip bash shell

  2. Cara grep \n dalam file

  3. Cara grep untuk unicode � dalam skrip bash