Оператор регулярного выражения, который соответствует одному символу, — .
. Это похоже на ?
в подстановочных знаках оболочки. *
соответствует любому числу предыдущих вещей в регулярных выражениях (, например, a*
соответствует любому числу (, включая 0 )из a
s ), и любому количеству символов в оболочке подстановочные знаки.
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/egrep
Solaris (, где вам нужно использовать /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
Некоторые оболочки просто записывают команду один раз, если вы повторяете ее несколько раз подряд.