Untuk menerima 20 karakter setelah dan sebelum pertandingan

14

Saya memiliki masalah sehingga saya mendapatkan terlalu banyak informasi setelah pertandingan

grep -RnisI --color=auto "pseudomonas" *

Saya hanya ingin mendapatkan 20 karakter atau 10 kata setelah dan sebelum pertandingan.

Apa alat yang tepat untuk melakukan hal seperti itu?

Léo Léopold Hertz 준영
sumber
1
Set pilihan Anda agak aneh ketika mengeluh tentang terlalu banyak informasi. Anda ingin satu baris setelah dan sebelum pertandingan Anda ditampilkan ( -A1dan -B1resp.), Tetapi terlalu banyak? Di mana tepatnya Anda ingin output Anda dipangkas?
Andreas Wiese
1
Bisakah Anda memberikan contoh input dan output yang Anda harapkan?
Ramesh
Saya telah mengubah perintah, saya uji di Ubuntu 13.10, beri tahu saya jika itu berhasil untuk Anda. Saya punya opsi grep dan opsi egrep
Eric
Lihat juga Konteks dari
persamaan

Jawaban:

23
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

Ini harus dilakukan untuk Anda

Memperbarui:

Jika Anda tidak ingin menggunakan cat, Anda bisa menggunakan grep dengan file sebagai parameter:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

Juga, -P menggunakan Perl Regex, yang dikatakan halaman manual itu eksperimental, jika Anda ingin menghindari tanda itu, Anda bisa menggunakan egrep sebagai gantinya:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Eric
sumber
File tes jelek yang kamu miliki;)
Ouki
Sisa file sebenarnya sangat berguna, yaitu bagian dari komentar multi-baris di tengah Skema yang harus dikecualikan tanpa merusak parser kami, itu hanya baris yang bagus untuk mencobanya.
Eric
Karena ini salah satu file saya, disetel ke 755, tetapi saya bisa melihat bagaimana cat mungkin tidak ideal untuk file HTML, Anda dapat mencoba memberikan nama file untuk grep sebagai parameter, lihat edit saya.
Eric
Maksud saya dengan 777 file bahwa Anda memiliki 777 salinan file yang berbeda, bukan chown. Saya menjalankan $$$ egrep -o '. {0,20} pseudomonas. {0,20}' * $$$. Perintah tetap di sana tanpa batas dan tidak melakukan apa-apa. Ini sekali lagi tampaknya bekerja $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. Sama dengan rekursi dan case-insetitive. Namun, ini sangat lambat. Saya pikir itu seharusnya tidak terlalu lambat. Grep jauh lebih cepat.
Léo Léopold Hertz 준영
jika catting tidak berhasil, Anda selalu bisa memasukkannya ke dalam file dengan menambahkan > results.txt di akhir perintah Anda, tetapi itu tidak akan memberi tahu Anda di file mana Anda menemukannya.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Mengasumsikan kecocokan dan konteksnya tidak tumpang tindih dan bahwa nama file tidak mengandung pseudomonas.

Perhatikan juga bahwa nomor baris yang dilaporkan adalah nomor awal dari konteks.

Stéphane Chazelas
sumber