Что-то вроде этого может сработать, если предположить, что оболочка 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
.
А как насчет:
$ 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
.