Grep для возможных результатов

Я отказался от этого и использую селектор загрузки BIOS для двойной загрузки.

2
20.03.2018, 14:12
3 ответа

Со следующим регулярным выражением:

^ex.{4}e$

Пример:

$ grep -E '^ex.{4}e$' <<< 'ex****e'

или

$ grep '^ex.\{4\}e$' <<< 'ex****e'

Выход:

    ex****e
2
27.01.2020, 21:49

Оператор регулярного выражения, который соответствует одному символу, — .. Это похоже на ?в подстановочных знаках оболочки. *соответствует любому числу предыдущих вещей в регулярных выражениях (, например, a*соответствует любому числу (, включая 0 )из as ), и любому количеству символов в оболочке подстановочные знаки.

POSIXly, чтобы найти строки, соответствующие e xдействующему на этом:

grep -xE 'ex.{4}e'

Или:

grep -x ex....e

или:

grep -x 'ex.\{4\}e'

Второй из которых является наиболее портативным. grep '^ex....e$'будет работать даже в исходной реализации Unix версии 4 (1973 ); однако -xбыл добавлен в Unix версии 7 (1979 )и в настоящее время является универсальным, поэтому вы можете положиться на него.

Расширенные регулярные выражения были добавлены в egrepв V7, но первоначально без интервальных операторов {x,y}. Этот оператор был добавлен как \{x,y\}для grep, но часто не в egrep, так как это нарушило бы обратную совместимость. Однако в начале девяностых POSIX представил опцию -Eдля grepдля слияния функциональности egrepс grepи требует, чтобы она поддерживала {x,y}, а egrepтеперь устарела.

Тем не менее, вы по-прежнему время от времени находите некоторые grepреализации, которые не поддерживают -Eили egrep, которые не поддерживают {x,y}, например /bin/grepи /bin/egrepSolaris (, где вам нужно использовать /usr/xpg4/bin/grepвместо ).

Имейте в виду, что некоторые grepреализации не поддерживают многобайтность, и их .оператор регулярного выражения может совпадать с каждым байтом многобайтового символа, например, не -ASCII UTF -8 символов ).

$ $ locale charmap
UTF-8
$ echo extrême | busybox grep -x ex....e 
$ echo extrême | gnu-grep -x ex....e
extrême
$ echo extrême | busybox grep -x ex.....e
extrême

Поскольку символ ê состоит из двух байтов в UTF -8, extrêmeсоставляет 7 символов, но 8 байтов:

$ printf %s extrême | wc -cm
      7       8
11
27.01.2020, 21:49

Базовый шаблон, предложенный @stéphane -chazelas:

grep -xE 'ex.{4}e'  

найдет любую строку, состоящую только из «e», «x», любых 4 символов и «e» и без пробела из-за переключателя «-x», что эквивалентно предложению @gilles -quenot. из

grep -E ^ex.{4}e$

Тем не менее, OP хотел «что-нибудь с ex в начале и e в конце с 4 символами между ними»,так что это будет включать строки с несоответствующим -содержимым и совпадающим содержимым вместе. Для этого вам понадобится шаблон

.
    grep -E 'ex.{4}e'

Кавычки для предотвращения расширения кронштейна оболочки.

0
27.01.2020, 21:49

Теги

Похожие вопросы