Saya memiliki file yang mungkin berisi format yang buruk (dalam hal ini, terjadinya pola \\backslash
). Saya ingin menggunakan grep
untuk mengembalikan hanya nomor baris di mana ini terjadi (seperti, pertandingan ada di sini, pergi ke baris # x dan memperbaikinya).
Namun, tampaknya tidak ada cara untuk mencetak nomor baris ( grep -n
) dan bukan pertandingan atau baris itu sendiri.
Saya dapat menggunakan regex lain untuk mengekstrak nomor baris, tetapi saya ingin memastikan grep tidak dapat melakukannya sendiri. grep -no
paling dekat, saya pikir, tapi masih menampilkan pertandingan.
grep -no
:! Ini melakukan apa yang ingin saya coba dan lakukan di sini! (yaitu tidak mencetak baris yang terkadang sangat panjang, misalnya, file sumber javascript yang diperkecil.)Jawaban:
mencoba:
sumber
-f
param. Bagi saya itu-f2
. (Ketahuilah ini adalah barang lama, tapi saya pikir itu bisa membantu beberapa jiwa yang malang)grep -n "text to find" file.ext | cut -f1,2 -d:
menunjukkan nama file dan nomor baris.-H
untuk memaksanya menampilkan nama file ketika hanya ada satu file. Sebaliknya, Anda selalu dapat menggunakan-h
untuk memberitahukannya agar tidak mengeluarkan nama file tidak peduli berapa banyak file yang Anda grep.Jika Anda terbuka untuk menggunakan AWK:
Dalam hal ini, FNR adalah nomor baris. AWK adalah alat yang hebat saat Anda melihat grep | cut, atau kapan pun Anda ingin mengambil keluaran grep dan memanipulasinya.
sumber
NR
berfungsi dengan baik bila hanya ada satu file yang sedang diperiksa, seperti dalam kasus ini.Semua jawaban ini membutuhkan grep untuk menghasilkan seluruh baris yang cocok, lalu menyalurkannya ke program lain. Jika baris Anda sangat panjang, akan lebih efisien jika menggunakan sed untuk mengeluarkan nomor baris:
sumber
Versi Bash
sumber
Saya merekomendasikan jawaban dengan
sed
danawk
untuk hanya mendapatkan nomor baris, daripada menggunakangrep
untuk mendapatkan seluruh baris yang cocok dan kemudian menghapusnya dari output dengancut
atau alat lain. Untuk kelengkapan, Anda juga bisa menggunakan Perl:atau Ruby:
sumber
Anda akan menginginkan kolom kedua setelah titik dua, bukan yang pertama.
grep -n "text to find" file.txt | cut -f2 -d:
sumber
Untuk menghitung jumlah garis yang cocok dengan pola:
Untuk mengekstrak pola yang cocok
Untuk menampilkan nomor baris yang polanya cocok
sumber
hanya menggunakan grep :
grep -n "text to find" file.ext | grep -Po '^[^:]+'
sumber