kent, grep --versionapakah perintah itu digunakan untuk mengetahui versi grep? Jika demikian, ini tidak berfungsi. Tidak dapat menemukan perintah lain untuk mengetahui versi grep.
Vivek
2
pertanyaan yang bagus tapi 'versi Os' adalah contoh nama file yang membingungkan
HaveAGuess
1
OS & versinya tidak relevan di sini.
MD XF
grep 'pattern' *
user0
Jawaban:
431
Coba trik kecil ini untuk membujuk grepagar berpikir itu berurusan dengan banyak file, sehingga ini menampilkan nama file:
Ya itu berhasil. Bisakah Anda memberi tahu saya apa pentingnya menambahkan /dev/nullperintah ini?
Vivek
55
Jika grepdisediakan dengan beberapa nama file, itu akan secara otomatis menampilkan nama file sebelum pertandingan, tetapi itu akan meninggalkan nama file dalam kasus file input tunggal. Dengan menggunakan /dev/nullsebagai file input tambahan grep"berpikir" itu berurusan dengan banyak file, tetapi / dev / null tentu saja kosong, sehingga tidak akan muncul dalam daftar pertandingan ..
Scrutinizer
32
menggunakan / dev / null adalah trik yang cerdas, tapi saya pikir saran di bawah bendera -H adalah jawaban yang lebih baik.
JohnQ
22
OK, tetapi -Hopsi untuk grep bukan bagian dari POSIX, dan OS yang digunakan adalah Solaris 10, di mana baik grep standar, maupun versi grep yang sesuai dengan POSIX dari grep tidak memiliki -Hopsi.
Scrutinizer
4
Itu penting jika Anda menggunakan grep dengan find, seperti find . -name foo -exec grep pattern {} \;- dengan asumsi banyak file yang disebutkan foodalam subdirektori Anda, findmasih grepmemberikan satu file untuk beroperasi pada satu waktu. The /dev/nulltrick tampaknya bekerja di semua linux / OSX rasa yang saya sudah mencoba, jadi pujian! Catatan saya pikir itu -Hlebih bersih, tetapi seperti yang disebutkan di bawah, itu mungkin tidak didukung dengan versi Andagrep .
Jon V
297
Jika Anda memiliki opsi -Hdan -ntersedia ( man grepadalah teman Anda):
@ kodeforester Saya tidak tahu yang lain grep, jadi saya tidak tahu.
MD XF
2
Keren ! ini bekerja untuk linux. jika Anda menggunakan mac, dapat menginstal coreutils dengan minuman. Dan ingat, tambahkan PATH = "/ usr / local / opt / coreutils / libexec / gnubin: $ PATH" ke milik Anda .bashrc
Ini berfungsi untuk saya dengan grep Mac bawaan (2.5.1-FreeBSD). Tetapi untuk menggunakan grep alternatif dari Homebrew, cara lain adalah menjalankan brew install grepdan kemudian hanya menggunakan ggrep. Tidak perlu memodifikasi PATH.
wonderlr
5
Bagaimana dengan ini, yang berhasil saya capai, sebagian, untuk posting ini.
Anda ingin menemukan beberapa file, misalkan log dengan nama yang berbeda tetapi sebuah pola (misalnya filename=logfile.DATE), di dalam beberapa direktori dengan pola (misalnya /logsapp1, /logsapp2). Setiap file memiliki pola yang Anda ingin grep (misalnya "init time"), dan Anda ingin memiliki "init time"masing-masing file, tetapi mengetahui file mana miliknya.
grep --version
grep --version
apakah perintah itu digunakan untuk mengetahui versi grep? Jika demikian, ini tidak berfungsi. Tidak dapat menemukan perintah lain untuk mengetahui versi grep.grep 'pattern' *
Jawaban:
Coba trik kecil ini untuk membujuk
grep
agar berpikir itu berurusan dengan banyak file, sehingga ini menampilkan nama file:Untuk juga mendapatkan nomor baris:
sumber
/dev/null
perintah ini?grep
disediakan dengan beberapa nama file, itu akan secara otomatis menampilkan nama file sebelum pertandingan, tetapi itu akan meninggalkan nama file dalam kasus file input tunggal. Dengan menggunakan/dev/null
sebagai file input tambahangrep
"berpikir" itu berurusan dengan banyak file, tetapi / dev / null tentu saja kosong, sehingga tidak akan muncul dalam daftar pertandingan ..-H
opsi untuk grep bukan bagian dari POSIX, dan OS yang digunakan adalah Solaris 10, di mana baik grep standar, maupun versi grep yang sesuai dengan POSIX dari grep tidak memiliki-H
opsi.find . -name foo -exec grep pattern {} \;
- dengan asumsi banyak file yang disebutkanfoo
dalam subdirektori Anda,find
masihgrep
memberikan satu file untuk beroperasi pada satu waktu. The/dev/null
trick tampaknya bekerja di semua linux / OSX rasa yang saya sudah mencoba, jadi pujian! Catatan saya pikir itu-H
lebih bersih, tetapi seperti yang disebutkan di bawah, itu mungkin tidak didukung dengan versi Andagrep
.Jika Anda memiliki opsi
-H
dan-n
tersedia (man grep
adalah teman Anda):Pilihan:
-H
adalah ekstensi GNU, tetapi-n
yang ditetapkan oleh POSIXsumber
-H
tidak didukung di sini.Tidak perlu trik.
Dengan nomor baris:
sumber
grep
, jadi saya tidak tahu.brew install grep
dan kemudian hanya menggunakanggrep
. Tidak perlu memodifikasi PATH.Bagaimana dengan ini, yang berhasil saya capai, sebagian, untuk posting ini.
Anda ingin menemukan beberapa file, misalkan log dengan nama yang berbeda tetapi sebuah pola (misalnya
filename=logfile.DATE
), di dalam beberapa direktori dengan pola (misalnya/logsapp1, /logsapp2
). Setiap file memiliki pola yang Anda ingin grep (misalnya"init time"
), dan Anda ingin memiliki"init time"
masing-masing file, tetapi mengetahui file mana miliknya.Maka
outputfilename.txt
akan menjadi sesuatu sepertiSecara umum
Penjelasan:
find
perintah akan mencari nama file berdasarkan pada polakemudian, pipa
xargs -I{}
akan mengarahkanfind
output ke{}
yang akan menjadi input untuk
grep ""pattern" {}
Kemudian trik untuk membuat
grep
tampilan nama file\dev\null
dan akhirnya, tulis output dalam file dengan
tee outputfile.txt
Ini bekerja untuk saya di
grep
versi 9.0.5 build 1989.sumber
find ./path_pattern/to_files -type f -name "files*.log" -exec grep -Hn pattern {} \;
Ini sedikit modifikasi dari solusi sebelumnya. Contoh saya mencari pengarahan stderr dalam skrip bash:
grep '2>' $(find . -name "*.bash")
sumber
berhasil bagi saya untuk mencari melalui semua file .txt (masukkan nilai pencarian Anda sendiri, tentu saja).
sumber