Katakanlah saya punya variabel
line="This is where we select from a table."
sekarang saya ingin memahami berapa kali pemilihan terjadi pada kalimat.
grep -ci "select" $line
Saya mencoba itu, tetapi tidak berhasil. Saya juga mencoba
grep -ci "select" "$line"
Itu masih tidak berhasil. Saya mendapatkan kesalahan berikut.
grep: This is where we select from a table.: No such file or directory
...<<<"$line"
. Perintahnyagrep
mengharapkan file sebagai gantinyaJawaban:
Telah
grep
membaca input standarnya. Ini dia, menggunakan pipa ...... atau string di sini ...
Selain itu, Anda mungkin ingin mengganti spasi dengan baris baru sebelum menangkap:
... atau Anda bisa meminta
grep
untuk mencetak pertandingan saja:Ini akan memungkinkan Anda untuk menyingkirkan sisa baris ketika ada kecocokan.
Sunting: Ups, baca sedikit terlalu cepat, terima kasih Marco . Untuk menghitung kejadian, kirimkan saja semua ini ke
wc(1)
;)Suntingan lain dilakukan setelah komentar lzkata , mengutip
$line
saat menggunakanecho
.sumber
wc
untuk menyelesaikan tugas:grep -o <string> <<< "$variable" | wc -l
echo "$line"
untuk melestarikan baris baru yang sudah ada alih-alih membuat yang baru dengantr
Anda tidak perlu menelepon
grep
untuk hal yang sangat sederhana.Atau sebagai fungsi:
Dibutuhkan 2 atau 3 argumen. Memberikan lebih dari itu akan membuat hasilnya miring. Anda bisa menggunakannya seperti:
... yang mencetak hitungan kemunculan
.
in...
jika itu terjadi setidaknya 2 kali. Seperti ini:Jika
$_occur
kosong atauunset
ketika dipanggil maka itu tidak akan mempengaruhi variabel shell sama sekali danreturn
1 jika"$2"
terjadi dalam waktu yang"$1"
lebih sedikit"$3"
. Atau, jika dipanggil dengan hanya dua arg, itureturn
hanya akan 1 jika"$2"
tidak ada"$1"
. Jika tidak mengembalikan 0.Jadi, dalam bentuknya yang paling sederhana, Anda dapat melakukan:
... yang mencetak ...
...tapi...
... akan mencetak ...
Anda mungkin juga menulisnya sedikit berbeda dan menghilangkan tanda kutip
$2
di kedua bagian(*"$2"*)
dan"${1#*"$2"}"
pernyataan. Jika Anda melakukannya, Anda dapat menggunakan gumpalan shell untuk pertandingan sepertish[io]te
untuk tes pertandingan.sumber
bash
dandash
/sh
(dan mungkin beberapa lainnya).