як підкреслити та надрукувати наступні N рядків після звернення?


16

Я хотів би поздоровитись про появу в текстовому файлі, а потім надрукувати наступні N рядків після кожного знайденого події. Будь-які ідеї?

Відповіді:


23

У Grep є такі варіанти, які дозволять вам це робити (і подібні речі). Ви можете переглянути детальну сторінку для отримання додаткової інформації:

  • -A num Друк числових рядків проміжного контексту після кожного матчу. Дивіться також параметри -B та -C.

  • -B num Друк числових рядків провідного контексту перед кожним матчем. Дивіться також параметри -A та -C.

  • -C [num] Роздрукувати числові рядки провідного та останнього контексту, що оточує кожну відповідність. За замовчуванням 2 та еквівалентно -A 2 -B 2. Примітка: між опцією та її аргументом не може бути задано пробіл.


7

Якщо у вас є GNU grep, це -A/ --after-contextваріант. В іншому випадку ви можете це зробити awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- працює, твій ні.
BladeMight


3

Роздрукуйте N рядків після відповідних рядків

Ви можете використовувати grepз -A nможливістю друку N рядків після узгодження ліній.

Наприклад:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Інші пов'язані варіанти:

Друкуйте N рядків перед узгодженням рядків

За допомогою -B nпараметра ви можете надрукувати N рядків перед узгодженням рядків.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Роздрукуйте N рядків до і після відповідних рядків

Використовуючи -C nопцію, можна надрукувати N рядків до і після відповідних рядків.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.