Shell
僅當字元不在大括號內時才替換字元(sed、awk、tr、…)
我有一個名為“desktops”的字元串,如下所示:
desktops="1 2 %{F#990000}3%{F-} 4 5 6 7 8 9 0"
“#”後面的 6 位數字代表一種 RGB 顏色,因此第 3 個桌面為深紅色。上面用空格分隔的數字之一可以代表一個焦點桌面,例如:
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-}/"
但是當顏色程式碼在焦點變數中存在數字時,它當然不起作用。
有什麼提示嗎?
匹配周圍的空間。臨時添加邊界空間,以便您可以匹配序列中的第一個或最後一個桌面數字,然後將其刪除。
echo " $desktops " | sed -e "s/ $focused / %{F#FFFF00}$focused%{F-} /" -e 's/^ \(.*\) $/\1/'
使用 GNU 擴展或類似擴展,您可以直接在單詞邊界上進行匹配:
echo "$desktops" | sed -e "s/\<$focused\>/%{F#FFFF00}$focused%{F-}/"