二重引用符間の文字列の抽出

二重引用符間の文字列の抽出

デフォルトモジュールはウィンドウ名を出力するので、現在アクティブなウィンドウクラスを表示するカスタムPolybarモジュールを作成しようとしています。

このコマンドを使用してウィンドウクラスを取得します。

xprop -id $(xdotool getactivewindow) WM_CLASS

次の出力を取得します。

WM_CLASS(STRING) = "kitty", "kitty"

ただし、希望の出力は次のとおりです。

kitty

どうすればいいですか?

ベストアンサー1

次の方法で外れることがあります。

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[^"]*'

これはあなたが言うのですか?
つまり、最初の引用符ペア内の文字列を抽出します。そうでなければ失敗しますか?

おすすめ記事