регулярное выражение c1-c2 в sed и grep

Почему бы просто не подключиться по SSH к мощному ноутбуку, перенаправить X и использовать менее -мощную машину в качестве клавиатуры/монитора/мыши?

Запустите отдельные приложения или запустите новый X-сервер на своем локальном компьютере и установите его $DISPLAYв качестве этого и запустите весь сеанс рабочего стола (, т.е.mate-session)

3
31.10.2019, 15:22
2 ответа

В локалях, отличных от POSIX/C, диапазоны символов используют не порядок ASCII, а последовательность сортировки для локали. Обычно они сложнее, чем порядок ASCII. Стандарт делает интерпретацию диапазонов символов довольно неопределенной (чтение :зависимой от приложения ), но, учитывая, что многие локали различают прописные и строчные буквы, имеет смысл разложить 1-cкак:

  • 1-от «1» до конца своей группы (т. е. числа от 1до 9...)
  • -cначало строчной группы, доc

(это также исключает знаки пунктуации ).

Итак, в моей локали [1-c]это то же самое, что и... [123456789aàâäbc]! (с, возможно, даже большим количеством вариантов «а», чем поддерживает моя клавиатура):

grep -Eo '[c1-c2]+' <<< '01234àâäbc'
1234àâäbc

И, конечно же, [c1-c2]соответствует одному и тому же, поскольку приведенный выше список уже содержит cи 2.

4
27.01.2020, 21:09

[c1-c2]— выражение в квадратных скобках . В приведенной форме он соответствует символу «с», диапазону символов от «1» до «с» включительно и символу «2». Диапазон символов зависит от региона; в локали POSIX это набор символов, чей ASCII-код находится между 49 (кодом для «1» )и 99 (кодом для «c» ). Таким образом:

$ echo : | LANG=C grep -E '[c1-c2]'
:
$ echo 0 | LANG=C grep -E '[c1-c2]'
$ echo A | LANG=C grep -E '[c1-c2]'
A

Я подозреваю, что намерение состояло в том, чтобы c1и c2представляли отдельные символы, ограничивающие интересующий вас диапазон, поэтому вы должны написать [a-m]или что-то в этом роде, а не [c1-c2].

7
27.01.2020, 21:09

Теги

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