中括弧(sed、awk、tr、...)内にない場合にのみ文字を置き換えます。

中括弧(sed、awk、tr、...)内にない場合にのみ文字を置き換えます。

次のように文字列「desktops」があります。

desktops="1 2 %{F#990000}3%{F-} 4 5 6 7 8 9 0"

「#」の後の6桁の数字はRGB色を表しているため、3番目の壁紙の色は濃い赤です。上記のスペースで区切られた数字の1つは、フォーカスされたデスクトップを表すことができます。たとえば、次のようになります。

focused="9"

この場合、次のような出力が必要です。

"1 2 %{F#990000}3%{F-} 4 5 6 7 8 %{F#FFFF00}9%{F-} 0"

RGBカラーコードの数がデスクトップリストにも表示されると問題が発生します。

私はこれを試しました:

echo $desktops | sed "s/$focused/%{F#FFFF00}$focused%{F-}/"

しかし、もちろんカラーコードのフォーカス変数に数字があると動作しません。

どのようなヒントがありますか?

ベストアンサー1

周辺空間と調和しています。順序の最初または最後のデスク番号を一致させるために、境界スペースを一時的に追加してから削除します。

echo " $desktops " | sed -e "s/ $focused / %{F#FFFF00}$focused%{F-} /" -e 's/^ \(.*\) $/\1/'

GNU 拡張または同様の拡張を使用すると、単語境界で直接一致させることができます。

    echo "$desktops" | sed -e "s/\<$focused\>/%{F#FFFF00}$focused%{F-}/"

おすすめ記事