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 ..
sumber
Jawaban:
Ada banyak cara untuk melakukan ini, tergantung pada kebutuhan Anda.
Cukup cetak semua baris yang mengandung kata kunci
test
:Sama tetapi untuk banyak kata kunci. Buat file yang memiliki semua kata kunci, satu per baris dan jalankan
Memproses file baris demi baris, keluar jika baris ditemukan
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:
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:sumber
Cara paling sederhana adalah tidak mem-parsing file baris demi baris sama sekali.
sumber
opsi grep:
misalnya:
sumber