7

У меня в файле LIST много строк, и я хочу перечислить только те строки, имя которых не начинается с (или не содержит) слова "git".

Пока что у меня есть:

cat LIST | grep ^[^g]

но я бы хотел что-то вроде:

#not starting by "git"
cat LIST | grep ^[^(git)]
#not containing "git"
cat LIST | grep .*[^(git)].*

но это не правильно. Какое регулярное выражение я должен использовать?

3 ответа3

15

Использование grep в этом случае с опцией -P , которая интерпретирует PATTERN как регулярное выражение Perl

grep -P '^(?:(?!git).)*$' LIST

Объяснение регулярного выражения:

^             the beginning of the string
 (?:          group, but do not capture (0 or more times)
   (?!        look ahead to see if there is not:
     git      'git'
   )          end of look-ahead
   .          any character except \n
 )*           end of grouping
$             before an optional \n, and the end of the string

Использование команды find

find . \! -iname "git*"
5

Так как OP ищет общее регулярное выражение, а не специально для grep, это общее регулярное выражение для строк, не начинающихся с "git".

^(?!git).*

Сломать:

^ начало строки

(?!git) не сопровождаемый 'мерзавцем'

.* сопровождается 0 или более символов

2

Если вы хотите просто перечислить все строки, которые не содержат git, попробуйте это

 cat LIST | grep -v git

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .