Bagaimana cara mengurai baris melalui file dalam bash

0

Saya sangat baru di shell scripting. Saya punya pertanyaan kecil tentang penguraian file.

Jadi, inilah yang saya coba lakukan:
Saya menjalankan perintah menggabungkan svn, dan file konflik genaratea file konflik saya disimpan sebagai konflik.txt

Yang ingin saya lakukan adalah membaca file ini baris demi baris dan menguraikan satu baris untuk mencocokkan dengan beberapa kata kunci.

Misalnya salah satu baris dalam file terlihat seperti ini:
C Client/Game/src/test/test.php

Sekarang saya ingin menguraikan baris ini dan mencari kata kunci test, jika saya menemukannya saya ingin melakukan beberapa tindakan di atasnya, misalnya dibatalkan dengan status keluar 2, 3, dll.

misalnya saya ingin beralih melalui file teks yang disebut "FILENAME" yang terlihat seperti ini

30 '!' C Client/test.js

31 '!' C Client/test2.js

32 '!' C Client/test3.js `

apa yang saya lakukan adalah melakukan catting file menggunakan while loop dan commnad cat

cat $FILENAME | while read LINE do echo $LINE done

di sini saya hanya mencetak baris, saya ingin tahu bagaimana saya bisa mencari keyworkd di baris dan jika saya menemukan kata kunci itu bagaimana saya bisa melakukan beberapa tindakan di atasnya seperti keluar dengan status 1

Bisakah Anda menyarankan beberapa cara untuk melakukan ini ..

Teka-teki
sumber
Saya tidak yakin apa yang Anda coba lakukan, tetapi ketika kedengarannya, semua yang Anda butuhkan sudah ada di sana. Lihat alat grep.
SBI
Silakan sertakan beberapa contoh spesifik. Tunjukkan pada kami file input Anda dan output yang Anda harapkan. Apakah Anda memiliki satu kata kunci atau banyak?
terdon
@terdon saya telah mengedit pertanyaan saya
Riddle

Jawaban:

2

Ada banyak cara untuk melakukan ini, tergantung pada kebutuhan Anda.

  1. Cukup cetak semua baris yang mengandung kata kunci test:

    grep test file.txt
  2. Sama tetapi untuk banyak kata kunci. Buat file yang memiliki semua kata kunci, satu per baris dan jalankan

    grep -f keywords.txt file.txt
  3. Memproses file baris demi baris, keluar jika baris ditemukan

    while read line; do echo $line | grep test && break; done < file.txt
  4. Keluar dengan status 1 jika salurannya cocok. Sayangnya, jika saya ingat dengan benar (tidak 100% yakin), bash hanya memungkinkan Anda untuk mengatur nilai balik dalam fungsi. Jadi, untuk mendapatkan status keluar Anda perlu menggunakan sesuatu yang lain. Perl misalnya:

    perl -ne '/test/ && exit(1)' file.txt
  5. Meskipun Anda tidak dapat menetapkan nilai keluar, Anda masih bisa melakukan sesuatu yang mirip dengan bash. Nilai keluar dari menjalankan perintah terakhir selalu disimpan seperti $?dalam bash, itu berarti Anda dapat menguji nilai $?dan bertindak sesuai:

    while read line; do let c++; echo $line | grep test >/dev/null; 
      if [[ $? == 0 ]] ; then echo Match for line $c : $line;
      else echo No match for line $c; fi  
    done < file.txt 
terdon
sumber
0

Cara paling sederhana adalah tidak mem-parsing file baris demi baris sama sekali.

grep -q 'keyphrase' filename && exit <exitcode> 
madlynx
sumber
Jangan bekerja sebagai root di shell hanya untuk mengambil string dari file.
ott--
Saya belum berurusan dengan pemformatan :)
madlynx
0
$ function some_action { 
    echo found keyword
}

$ if grep -q -m1 -e 'test3' < input;
  then 
      some_action
  fi
found keyword

opsi grep:

  • -q: diam; jangan cetak yang cocok
  • -m1: keluar setelah satu pertandingan
  • -e: ekspresi (kata kunci)

misalnya:

$ grep . input
30 '!' C Client/test.js
31 '!' C Client/test2.js
32 '!' C Client/test3.js

$ if grep -q -m1 -e 'test3' < input; then some_action ; fi
found keyword
Ярослав Рахматуллин
sumber