我有一个名为“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-}/"
但是,当颜色代码的焦点变量中存在数字时,它当然不起作用。
有什么提示吗?
答案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-}/"