Поиск шаблона Regex чередования регистра символов

Хотя это были возрасты с прошлого раза, когда у меня была рабочая станция SunOS, я предположу, что GUI обычно является частью runlevel 3 по умолчанию, и изменяющийся на runlevel 2 отключил бы GUI:

telinit 2 

GUI (возможно Xorg) наиболее вероятен сервис, с которым можно отключить svcadm disable <FMRI> Список possble сервисов может быть найден с svcs -a.

2
28.01.2015, 01:37
4 ответа
set aAbBaBbA bAbBaA bbAb AAaBbAa BBBaaa aBaB
l= u=;  printf %s\\n    "$@" |
        grep -E "^([${l:=[:lower:]}][${u:=[:upper:]}])+[$l]?$|^([$u][$l])+[$u]?$"

Выход:

aAbBaBbA
bAbBaA
aBaB

Но смотрите ответ Пьера для (очевидно) . Лучшая версия этого.

Тем не менее, есть еще один способ:

grep -vE '[^[:alpha:]]|[[:lower:]]{2}|[[:upper:]]{2}|^$'

... Хотя это будет соответствовать только одному символу на линии. Вы можете исправить это, делая . между ^ и $ в конце.

2
27.01.2020, 21:50

try

ls -1 | grep -E '^[A-Z]?([a-z][A-Z])*[a-z]?$'

EDIT: как правильно указал @mikeserv, для не-ASCII символов это не сработает. И действительно, они встречаются довольно часто (например, музыкальные файлы с иностранными названиями для имени файла). Так что более надежный способ:

ls -1 | grep -E '^[[:upper:]]?([[:lower:]][[:upper:]])*[[:lower:]]?$'

В следующем я сохраняю только [A-Z] для удобочитаемости.

Также предостережение: это будет соответствовать одному символу (верхнему или нижнему). Можно утверждать, что "переменный случай" не определяется ни одним последующим подобным случаем в последовательности нулей и более символов... :-)

Test:

mkdir -p /tmp/junk
cd /tmp/junk
touch aAbBaBbA bAbBaA bbAb AAaBbAa BBBaaa aBaB

ls -1 | grep -E '^[A-Z]?([a-z][A-Z])*[a-z]?$'
# aAbBaBbA
# aBaB
# bAbBaA

Но этого недостаточно. Еще несколько тестов:

touch aB
touch aBcD
touch aBcDeF
touch aBcDEf
touch Ab
touch AbCd
touch AbCdEf
touch AbCdeF
touch AbCdEF
ls -1 | grep -E '^[A-Z]?([a-z][A-Z])*[a-z]?$'
# aAbBaBbA
# aB
# Ab
# aBaB
# aBcD
# AbCd
# aBcDeF
# AbCdEf
# bAbBaA
5
27.01.2020, 21:50

Раствор

grep -E '^([a-z][A-Z])+$'
0
27.01.2020, 21:50

Введите эту команду:

ls | grep -E '^ ([[: upper:]] [[: lower:]]) + [[: upper:]]? $ | ^ ([[: Lower :]] [[: upper:]]) + [[: lower:]]? $ '

Чтобы разбить это на части.

  • ls - это основная команда

  • Она передается по конвейеру grep

  • Переключатель -P или -E сообщает grep для поиска с использованием регулярных выражений (regex)

  • В одинарных кавычках ' и круглых скобках () выкладывается шаблон.

  • Обычно читается как соответствие любой заглавной букве [[: upper:]] , затем любой меньшей букве [[: lower:]]

  • или с использованием вертикальной черты |

  • Затем сопоставьте любую меньшую букву [[: lower:]] , затем сопоставьте любую верхнюю букву [[: upper:]]

  • + будет соответствовать все, что заключено в круглые скобки () , и воспроизвести это в приведенном списке.

  • $ сообщает, когда шаблон заканчивается

3
27.01.2020, 21:50

Теги

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