регулярное выражение, как найти строку со словом, начинающимся с хххх - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть много файлов с такой строкой

#include <xxxx/nnnnn/xxxx_files_names.h> 

Я хочу найти этот шаблон с помощью grep, и файл также содержит содержимое такого теста xxxx_files_names_yyyy. Но я не хочу xxxx_files_names_yyyy в моем поиске grep. Я хочу только

#include <xxxx/nnnnn/xxxx_files_names.h> 

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Быстро и грязно, как предложил комментатор в комментарии:

grep 'xxxx' file | grep -v 'yyyy'

Я называю это "грязно", потому что, если yyyy является частью вашего пути, он также будет отфильтрован, что не требуется.

Использование grep -P и отрицательный взгляд за

kent$  cat ff
#include <xxxx/nnnnn/xxxx_files_names.h> 
#include <xxxx/yyyy/xxxx_files_names.h>  <-we want it!
#include <xxxx/nnnnn/xxxx_files_names_yyyy.h> 

kent$  grep -P 'xxxx.*(?<!yyyy)[.]h' ff
#include <xxxx/nnnnn/xxxx_files_names.h> 
#include <xxxx/yyyy/xxxx_files_names.h>  <-we want it!
0 голосов
/ 01 мая 2020

Простой grep должен быть хорошим, как объясняет @Shellter. Я добавлю тест и результаты для простоты понимания, я ищу в 3 файлах test1.txt, test2.txt и test3.txt, вы можете оставить его с подстановочным знаком «*» для глобального поиска в папке.

При поиске шаблона он возвращает все совпадающие шаблоны, grep не заботится о том, что к шаблону добавлено с префиксом / суффиксом, возвращается вся строка.

 $grep "india" test*
    test1.txt:india.a
    test1.txt:india_a
    test1.txt:india_z
    test2.txt:india.a
    test2.txt:india_a
    test2.txt:india_z
    test3.txt:india.a
    test3.txt:india_a
    test3.txt:india_z

Когда выполняется точное поиск строк из файла с совпадениями возвращаются.

$grep "india_a" test*
test1.txt:india_a
test2.txt:india_a
test3.txt:india_a

Другой способ исключить шаблон specfi c - использовать "grep -v", как показано ниже, что исключит строки с шаблоном из выходных данных. возвращается первым grep.

$grep "india" test* | grep -v "india_z"
test1.txt:india.a
test1.txt:india_a
test2.txt:india.a
test2.txt:india_a
test3.txt:india.a
test3.txt:india_a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...