Извлечь одну строку между двойными кавычками

Опубликованное здесь решение не сработало для меня, но поскольку этот вопрос возник первым, когда я искал решение аналогичной проблемы, а также -t -tтрюк был упомянут здесь, я опубликую решение, которое сработало для меня, чтобы другие могли попробовать.

ssh -t -t -o ControlMaster=auto -o ControlPath='~/test.ssh' your_remote_ip_goes_here "your_long_running_command" &
sleep 100
ssh -o ControlPath='~/test.ssh' -O exit your_remote_ip_goes_here

Моя длительная команда больше не выполнялась, когда соединение было разорвано таким образом.

-1
05.04.2020, 08:15
3 ответа

Пробовал методом

xprop -id $(xdotool getactivewindow) WM_CLASS| awk '{gsub(/[","]/,"",$3);print $3}'


output

kitty

питон

вывод команды "xprop -id $ (xdotool getactivewindow )WM _CLASS" сохраняется в переменной "a"

#!/usr/bin/python
import re
a='"WM_CLASS(STRING) = "kitty", "kitty"'
b=a.split(' ')[2]
print b.replace('"','').replace(",","")
-1
28.04.2021, 23:18

Вам может сойти с рук:

xprop -id $(xdotool getactivewindow) WM_CLASS | 
    awk -F '"' '{print $2}'

Но и с (более простым):

xprop -id $(xdotool getactivewindow) WM_CLASS | 
    cut -d '"' -f 2

Или (предупреждение, если регулярное выражение не соответствует, будет напечатан весь ввод)

xprop -id $(xdotool getactivewindow) WM_CLASS | 
    sed 's/^[^"]*"\([^"]*\)".*$/\1/'

Или снова sed, но более надежный:

xprop -id $(xdotool getactivewindow) WM_CLASS |
    sed -n 's/^[^"]*r"\([^"]*\)".*$/\1/p'

Или, даже (не такой надежный )с grep (, а только GNU grep и с регулярным выражением Perl):

xprop -id $(xdotool getactivewindow) WM_CLASS |
    grep -Po  '^[^"]*"\K[^"]*'

Вы это имеете в виду?
В словах :извлеките строку внутри первой пары кавычек, иначе не получится?

1
28.04.2021, 23:18

xpropвыводит строки в формате, очень похожем на формат ksh93/zsh/bash $'...', заключая в кавычки, где обратная косая черта, управляющие и не -символы ASCII представлены как их ANSI C \\, \n, \r,\tили \ooo.

Единственная разница заключается в том, что, поскольку они заключены в двойные кавычки, "отображается как \", а 'отображается как 'вместо \', так что это не должно быть слишком сложно преобразовать этот вывод в WM_CLASS=$'...'для оценки оболочкой.

Однако еще проще (и безопаснее )заставить xpropвыводить его в виде шестнадцатеричных значений и преобразовывать в$'\xHH...':

Для имени приложения (первый kittyв вашем примере):

eval "$(
  xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
    sed 's/0x/\\x/g;s/[, ]//g;s/\\x0.*/'\''/;s/=/=$'\'/
)"

для имени класса приложения (второй kittyв вашем примере):

eval "$(
  xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
    sed 's/0x/\\x/g;s/[, ]//g;s/=.*\\x0\(.*\)\\x0/=$'"'\\1'/"
)"

Оба задают переменную оболочки $WM_CLASS.

Это будет работать независимо от того, какое байтовое значение может содержать свойство.

Предполагается оболочка с поддержкой $'\xHH'.

1
28.04.2021, 23:18

Теги

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