GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menemukan/grep Apa Antara String1 Dan String2?

Saya mencoba mengekstrak nilai dari string panjang yang dapat berubah seiring waktu. Jadi misalnya string bisa terlihat seperti ini

....../filename-1.9.0.3.tar.gz"<....

Dan yang ingin saya ekstrak adalah nilai antara nama file- dan .tar.gz , pada dasarnya versi file (1.9.0.3 dalam kasus ini). Alasan saya perlu melakukannya dengan cara ini adalah karena nanti saya dapat menjalankan perintah dan nilainya akan menjadi 1.9.0.6 atau 2.0.0.2 atau sesuatu yang sama sekali berbeda.

Bagaimana saya bisa melakukan ini? Saat ini saya hanya menggunakan grep, tetapi saya tidak keberatan menggunakan utilitas lain seperti sed atau awk atau cut atau apa pun. Agar sangat jelas, saya hanya perlu mengekstrak versi file bagian dari string, karena sangat panjang (di kedua sisi) segala sesuatu yang lain perlu dipotong entah bagaimana.

Jawaban yang Diterima:

Dengan grep -P /pcregrep , menggunakan pandangan positif ke belakang dan pandangan ke depan yang positif:

grep -P -o '(?<=STRING1).*?(?=STRING2)' infile

dalam kasus Anda, ganti STRING1 dengan filename- dan STRING2 dengan .tar.gz

Jika Anda tidak memiliki akses ke pcregrep dan/atau jika grep . Anda tidak mendukung -P Anda dapat melakukannya dengan alat pengolah teks favorit Anda. Inilah cara portabel dengan ed yang memberi Anda hasil yang sama:

ed -s infile <<IN
g/STRING1/s// 
&/g
v/STRING1.*STRING2/d
,s/STRING1//
,s/STRING2.*//
,p
IN

Cara kerjanya:baris baru ditambahkan ke setiap STRING1 kemunculan (jadi sekarang ada paling banyak satu kemunculan per baris) maka semua baris tidak cocok dengan STRING1.*STRING2 dihapus; pada yang tersisa kami hanya menyimpan apa yang ada di antara STRING1 dan STRING2 dan cetak hasilnya.


Linux
  1. Apa Proses Zombie Dan Bagaimana Menemukan &Membunuh Proses Zombie?

  2. Cara Menemukan Siapa yang Masuk Di Sistem Anda Dan Apa yang Mereka Lakukan

  3. Bagaimana Menemukan Banyak String Dalam File??

  1. Apa perbedaan antara perintah locate dan find di Linux?

  2. Bagaimana cara Menggabungkan find dan grep untuk pencarian yang kompleks? ( GNU/linux, temukan, grep )

  3. Apa perbedaan antara ls dan l?

  1. Apa itu Makefile dan bagaimana cara kerjanya?

  2. Apa perbedaan antara InnoDB dan MyISAM?

  3. Apa itu email, dan bagaimana navigasinya?