греп оточуючих персонажів сірника


8

Я хочу знайти і замінити гігантський дамп бази даних, і він не робить те, що, на мою думку, має відбутися. Я хотів би прогорнути мій цільовий рядок у файлі, а потім побачити навколишні 8 символів або близько того (мені може знадобитися коригувати це число, залежно). Як я можу це зробити?

Причиною цього я не можу підвести очі, тому що існує багато сотень, якщо не тисячі матчів. Я хочу знайти деяку кількість символів, що оточують рядок, а потім uniqпередати її в щось або щось, щоб зрозуміти, чому в моєму пошуку та заміні є несподівана поведінка.

Також на одній лінії може бути кілька матчів!


Це не текстовий файл?
enzotib

Так, але навіть просто сірники занадто великі файли для очного яблука.
користувач394

Відповіді:


12

Сирий спосіб використання grepбув би чимось подібним

grep -o "....yourtext...." /path/to/the/dump.sql

Кількість крапок відповідає кількості символів до / після тексту, що переглядається. Цей -oпараметр grepвиводить лише збіги, а не цілі рядки.

Щоб використовувати uniqна виході, пам’ятайте, що ви повинні спочатку сортувати вихід. Так зазвичай ти робиш

grep . . . | sort | uniq

Якщо ви зацікавлені в кількості квитків на кожен матч, ви можете отримати хороший результат, використовуючи

grep . . . | sort | uniq -c | sort -n

Сирий? Дуже витончено!
користувач394

1
Ви могли б розширити це трохи за допомогою оператора повтору grep -o '.\{8\}yourtext.\{8\}'. Це трохи менш запаморочливо, ніж підрахунок 8 крапок.
Калеб

:) Під грубим я маю на увазі, що ви не граєте з такими речами, як підрахунок відповідних символів (з використанням діапазонів) або звуження наборів символів.
rozcietrzewiacz

@Caleb та user394: Це саме те, що я не збирався пропонувати (і, таким чином, назвав свій метод "сирим"). Не потрібно пам’ятати про повторну конструкцію оператора, до того ж - це ще швидше набрати ".....", ніж ". \ {6 \}".
rozcietrzewiacz

7

Починаючи з відповіді @rozcietrzewiacz, я можу перейти до

pattern="string"
num=8
grep -on ".\{0,$num\}$pattern.\{0,$num\}" input-file

1
"Сира" крапка послідовно виглядає все краще і краще :)
Калеб

1
@Caleb: як правило, "груба" відповідь - це хороший початок, але іноді хочеться трохи детальніше розглянути це.
enzotib

1
Метод послідовності точок не знайде виправдані цільові шаблони зліва або справа; цей метод буде. (+1)
Пітер.O

2
PS .. Я щойно помітив, що він не буде вловлювати кілька екземплярів візерунка в одному рядку (як згадувалося в ОП), коли сфера тексту тексту "exta" першого шаблону перекриває область основного "зайвого" тексту наступного зразка
Пітер.О

@fred: так, -oдає лише перший матч, коли два матчі перетинаються:echo 'aaabbbccc' | grep -o 'bb
enzotib
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.