grep - удаление строки, которая содержит что-либо кроме указанных символов - PullRequest
2 голосов
/ 20 января 2012

Я пытаюсь найти способ удалить любые строки, которые содержат символы, отличные от указанных.Например, если я укажу символы a, e, i, o, u, r, s, t и у меня будет список слов

rat
tar
set 
meow 

, тогда «мяу» следует удалить из списка, посколькусодержит буквы "м" и "ш", которые я не одобрил.Есть идеи?

Ответы [ 2 ]

3 голосов
/ 20 января 2012

В качестве альтернативы вы можете сделать это:

$ grep -v '[^aeiourst]' file.txt
rat
tar
set

Шаблон соответствует строкам, которые содержат любой символ, не указанный в списке.Это ясно объяснено на странице руководства grep:

Выражение в скобках - это список символов, заключенный в [и].Это соответствует любому отдельному символу в этом списке;если первым символом списка является символ ^, то он соответствует любому символу, отсутствующему в списке.Например, регулярное выражение [0123456789] соответствует любой одной цифре.

В дополнение к этому, поскольку требуется удалить строки, соответствующие этому шаблону, используется опция -v/--invert-match.Это также хорошо объясняется на справочной странице grep:

-v, --invert-matchИнвертируйте смысл соответствия, чтобы выбрать несовпадающие строки.(-v определяется POSIX.)

0 голосов
/ 20 января 2012

Это должно сделать это для вас.Он содержит буквы, которые вы указали в наборе, заключенном в [].* обозначает, что они могут встречаться любое количество раз.^ обозначает, что строка должна начинаться с одной из этих букв, а $ обозначает, что она также должна заканчиваться.

grep '^[aeiourst]*$' file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...