Используйте grep для длинной строки, чтобы получить часть строки

406
whitebear

Я хочу искать в длинном предложении (более 1024 букв).

У меня есть один текстовый файл ( test.txt), который имеет одно длинное предложение, например:

afdafglwqgkjrldjl;ewqje;'k;g;je;;;fdsgalsdkf;akslg;safdas.....dasfsd 

Теперь я хочу проверить, какая строка содержит слово saf. Эта команда просто показывает целое предложение:

less test.txt | grep saf 

Можно ли получить часть предложения или я должен использовать команду, отличную от grep?

1
`grep -o 'saf' text.text`? Cyrus 5 лет назад 0
Спасибо! Это показывает согласованную точку. однако возможно ли показать несколько букв до и после матчей ??? whitebear 5 лет назад 0
`grep -o '. \ saf. \ ' text.text` - будет содержать до трех символов до и до трех символов после. Но если есть второй `saf` и он начинается внутри этих" трех символов после ", то он не будет сопоставляться отдельно. Kamil Maciorowski 5 лет назад 0
@KamilMaciorowski Это идеально, что я хочу. это работает очень хорошо whitebear 5 лет назад 0

1 ответ на вопрос

2
t0r0X

Не совсем то, что вы искали: покажите совпадающие линии и выделите вхождения в этих строках:

grep --color 'saf' test.txt 

Варианты поиска safи отображения до 15 символов до и после обнаруженных случаев с использованием:

  • стандартный синтаксис регулярных выражений, впервые упомянутый @ kamil-maciorowski в его комментарии к вопросу:

    grep -o '.\saf.\' test.txt | grep saf --color 
  • Perl-совместимый синтаксис регулярных выражений с -Pопцией, если она доступна:

    grep -o -P '.saf.' test.txt | grep --color saf 
  • расширенный синтаксис регулярных выражений с -Eопцией, если у вас grepнет -Pопции (как, например, в macOS):

    grep -o -E '.saf.' test.txt | grep --color saf 
Смотрите мой комментарий под вопросом. Если вы добавите замечание к вашему ответу о возможности не соответствовать всем `saf` -ам, я добавлю голос и удалю свой комментарий. Kamil Maciorowski 5 лет назад 0
Спасибо @ t0r0X, я тоже попробовал ваш. у моего grep как-то нет опции -P. и обратный слеш перед '"` whitebear 5 лет назад 0
@whitebear Действительно, не у каждого grep есть `-P`, но есть еще один вариант, я снова обновлю свой ответ. t0r0X 5 лет назад 0
@ kamil-maciorowski Я посмотрю на это. t0r0X 5 лет назад 0