Как разобраться с расширением фигурных скобок? - PullRequest
1 голос
/ 25 марта 2020

У меня есть список файлов с номенклатурой yyyyMMdd. Я хотел бы получить список файлов, исключая несколько дат. Для этого я использую следующую команду

$ ls | grep -ve 202003{04,11,23}
grep: 20200311: Is a directory
grep: 20200323: Is a directory

Команда работает только в том случае, если я раскрою фигурную скобку вручную, с интервалом между опциями -e, то есть

ls | grep -v -e 20200304 -e 20200311 -e 20200323

Что бы быть более эффективным способом сделать это?

Ответы [ 2 ]

4 голосов
/ 25 марта 2020

Вы не можете сделать это с расширением оболочки, как хотите, потому что он заменит ваш единственный аргумент несколькими отдельными аргументами (если и только если есть файлы или каталоги, которые соответствуют шаблону - если нет совпадения с другим нежелательным вещи могут случиться). Однако аргумент grep является регулярным выражением. С помощью расширенных регулярных выражений (флаг -E) вы можете сделать это.

$ ls | grep -vEe "202003(04|11|23)"

Обратите внимание, вам не нужно -e для одного параметра поиска, поэтому

$ ls | grep -vE "202003(04|11|23)"

тоже работает.

2 голосов
/ 25 марта 2020

Вам может понадобиться это: ls | grep -vP "202003(04|11|23)"

Если -P не работает, попробуйте заменить его на -E.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...