Ни \b
, ни \B
не являются символами. Оба являются шаблонами нулевой ширины -, которые соответствуют между символами .
Шаблон \b
соответствует границе слова, то есть между символом, который является «символом слова», и символом, который не является «символом слова».
Шаблон \B
соответствует границе слова, отличной от -, т. е. между двумя символами, которые либо являются «символами слова», либо нет.
Шаблон [^\b]
соответствует одному символу . Вот почему pear
преобразуется в pu
, вы заменяетеear
(на a
и окружающие символы ).
В GNU sed
[^\b]
соответствует символу, который не является \
или b
.
Не существует способа использовать класс символов для замены использования \B
, о котором я знаю.
Шаблоны \b
и \B
поддерживаются GNU sed
. И GNU sed
, и BSD sed
также имеют \<
и \>
для явного сопоставления в начале и конце слова, а BSD sed
дополнительно поддерживает шаблоны POSIX [[:<:]]
и [[:>:]]
(, но GNU sed
нет ). Шаблоны POSIX нельзя отменить([^[:>:]]
не работает ).
Чтобы получить аналогичный эффект без использования \B
, вы можете использовать что-то вроде
$ echo 'apple pear melon banana cherry papaya' | sed 's/\([[:alnum:]]\)a\([[:alnum:]]\)/\1u\2/g'
apple peur melon bunana cherry pupaya
То есть совпадение с буквенно-цифровым символом по обе стороны от a
,а затем включить эти два фланговых символа в замену. Обратите внимание, что поскольку замена происходит только для неперекрывающихся совпадений -, это не будет правильной заменой a
в строке, содержащей несколько последовательных a
(или a
в каждой второй позиции. ). Посмотрите, как из-за этого banana
не выходит как bununa
.
Чтобы разобраться с этим, вы можете ввести цикл в программу sed
:
sed -e :top -e 's/\([[:alnum:]]\)a\([[:alnum:]]\)/\1u\2/g' -e ttop
Это выполняет замену во входной строке столько раз, сколько необходимо, пока не будут обработаны все совпадения перекрывающихся шаблонов.
Во-первых, я думаю, CentOS связан с python, поэтому просто проверьте, где находится python (which python
), и создайте ссылку для /usr/bin/python2.7
Для ручной установки вам необходимо загрузить исходный код и установить его вручную из tar-шара.
Эта ссылка поможет вам: