중괄호(sed, awk, tr, ...) 안에 있지 않은 경우에만 문자를 바꿉니다.

중괄호(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-}/"

하지만 물론 컬러코드의 포커스 변수에 숫자가 있으면 동작하지 않습니다.

어떤 팁이 있나요?

답변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-}/"

관련 정보