fdisk -l | Команда grep с подстановочным знаком не показывает результаты

358
Tomas.R

Почему команды

fdisk -l | grep sd?  fdisk -l | grep sd??  

не работать в этой ситуации и

fdisk -l | grep sd[ab] 

работает ?

terminal window

0
Прежде всего вы должны заключить эти аргументы в кавычки `?` Или `*` или `[…]` или любым синтаксисом, который может вызвать глобализацию оболочки, если вы не хотите, чтобы произошла глобализация оболочки. Если ваш текущий каталог содержал `sdb` и / или` sda`, вывод `fdisk -l | grep sd [ab] `будет другим. Любой полученный вами ответ, который намеревается передать `?` Или `*` в `grep` и не помещать его в кавычки, ошибочен. Kamil Maciorowski 5 лет назад 0
Спасибо Накини за редактирование моего вопроса:] Камил, спасибо за урок о цитатах. Dziekuje Бардзо. Tomas.R 5 лет назад 0

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

1
Nakini

Не все регулярные выражения в grepтак же, как shell. Для распечатки диска с ? , используйте следующее

fdisk -l | grep 'sd?*' 

Фактически, вышесказанное может быть достигнуто с помощью следующей упрощенной версии:

fdisk -l | grep sd 
Спасибо за подробный ответ Накини. Это сработало отлично. Камил Я создал файлы с помощью touch, как ты и предлагал, но fdisk -l | grep 'sd? *' возвращает только устройства, а не любые из этих файлов. Tomas.R 5 лет назад 0
@KamilMaciorowski, я согласен с обеими вашими проблемами. Я обновил свой ответ вашими отзывами. Nakini 5 лет назад 0
0
simlev

Вы, вероятно, хотели использовать egrep:

fdisk -l | grep sd..? 

Но этого может быть достаточно, чтобы использовать правильное регулярное выражение:

fdisk -l | grep 'sd.\|sd..' 

Объяснение:

egrepэквивалентно grep -Eиспользованию другой улучшенной версии регулярных выражений .

.означает любой персонаж

\|означает или

Смотри man grep:

-E, --extended-regexp Interpret PATTERN as an extended regular expression (ERE, see below).  grep understands three different versions of regular expression syntax: “basic” (BRE), “extended” (ERE) and “perl” (PCRE). In GNU grep, there is no difference in available functionality between basic and extended syntaxes. In other implementations, basic regular expressions are less powerful. The following description applies to extended regular expressions; differences for basic regular expressions are summarized afterwards. Perl-compatible regular expressions give additional functionality, and are documented in pcresyntax(3) and pcrepattern(3), but work only if PCRE is available in the system.  The period . matches any single character.  Alternation Two regular expressions may be joined by the infix operator |; the resulting regular expression matches any string matching either alternate expression. 
Две проблемы: (1) Ваш первый пример не использует `egrep`. :) (2) После `touch sd..1 sd..2` он будет делать что-то еще. Я надеюсь, ты знаешь почему. Kamil Maciorowski 5 лет назад 0