Saya mencoba untuk mendapatkan jumlah kecocokan (dalam hal ini kejadian {
atau }
) di setiap baris file .tex.
Saya tahu bahwa -o
bendera hanya mengembalikan kecocokan, tetapi mengembalikan setiap kecocokan pada baris baru, bahkan dikombinasikan dengan -n
bendera. Saya tidak tahu apa-apa saya bisa menyalurkan ini untuk menghitung pengulangan. The -c
bendera hanya mengembalikan jumlah pertandingan di seluruh file - mungkin aku bisa pipa satu baris pada suatu waktu untuk grep?
sort
tidak sepenuhnya diperlukan karena output grep diurutkan berdasarkan nomor baris, tapi saya kira itu praktik yang baik sebelumnyauniq
.regex
karena regex adalah bagian yang mudah.sort -n
? Bukankah itu keluar dalam urutan nomor baris?sort -n
tidak perlu. Terima kasih.Setelah membaca berbagai solusi, saya pikir ini adalah pendekatan termudah untuk masalah:
sumber
grep -o "matchingString" <<< $i | wc -l
.Apakah menggunakan
grep
persyaratan? Inilah alternatifnya:The
sed
strip semua karakter selain{
dan}
(yaitu, hanya menyisakan{
dan}
karakter), dan kemudianawk
jumlah karakter di setiap baris (yang hanya{
dan}
karakter). Untuk menekan garis tanpa kecocokan,Perhatikan bahwa solusi saya mengasumsikan (mengharuskan) bahwa string yang Anda cari adalah karakter tunggal. Jawaban Moebius lebih mudah disesuaikan dengan string multi-karakter. Juga, tidak satu pun dari jawaban kami yang mengecualikan kemunculan karakter / rangkaian minat; misalnya,
akan dianggap mengandung empat karakter penjepit.
sumber
grep
tidak benar-benar persyaratan, itu hanya di mana saya mulai mencari solusi, karena itu memberi saya sesuatu yang dekat. Saya tidak pernah membutuhkan awk, jadi seandainya saya tidak menggunakan jawaban di atas, saya akan menggunakan ini sebagai kesempatan untuk bereksperimen - saya mungkin masih. Apa yang saya gagal jelaskan (tetapi tidak mempengaruhi jawaban mana pun) adalah bahwa saya ingin menjalankan skrip sekali per braket, untuk membantu saya melacak ketidakcocokan (dalam sumber LaTeX, di sini untuk tabel) di mana sebagian besar pasangan terjadi di satu baris.sed 's/{[^{}]*}//g' your_file | grep –n '[{}]'
, di manased
strip keluar (cocok) berpasangan. Jika Anda memiliki pasangan bersarang, gunakansed 's/{[^{}]*}//g;s/{[^{}]*}//g;s/{[^{}]*}//g;…' …
, ulangis/{[^{}]*}//g
sebanyak yang Anda miliki .