Как сделать этот LookBehind в Regex?

Что-то вроде этого может сработать, если предположить, что оболочка bash.

TTY="pts/20"
BASH_PID="$(ps -t $TTY|awk '$4 == "bash" {print $1;exit}')"
TTY_DISPLAY=$(tr '\000' '\n' < /proc/$BASH_PID/environ|awk -F'=' '$1 == "DISPLAY" {print $2}')

Мы указываем TTY, захватываем первый найденный bash pid, а затем извлекаем DISPLAY var из /proc/pid/environ.

1
08.08.2016, 18:19
1 ответ

А как насчет:

$ echo 1.000000000000002, 0.999999999999999, 999.000999000999|
   sed 's/\([09]\)\1\{2,\}/\1..\1/g'
1.0..02, 0.9..9, 9..9.0..09..90..09..9

Это [09] , за которым следует сам ( \ 1 является обратной ссылкой на [09] , захваченной в группе захвата \ ([09] \) ), повторенной 2 или более раз. Обратите внимание, что он отличается от [0-9] \ {3, \} , который соответствует 0000 , но также 0909 .

Не все синтаксисы регулярных выражений поддерживают обратные ссылки.Стандартные базовые регулярные выражения, используемые sed do, стандартные расширенные регулярные выражения (например, в egrep ) не поддерживают его, хотя некоторые реализации ERE поддерживают его как расширение . Это случай GNU sed с параметром -r / -E (другое нестандартное расширение), с которым вы можете использовать sed -E 's / ([09]) \ 1 {2,} / \ 1 .. \ 1 / g' здесь.

Perl и совместимые регулярные выражения работают, и похоже, что регулярные выражения MATLAB также поддерживают их , и даже поддерживают именованные обратные ссылки , как в perl .

3
27.01.2020, 23:25

Теги

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