하위 문자열 색상 지정

하위 문자열 색상 지정

문자열을 가져와 함수 인수로 전달된 부분에 색상을 지정하고 싶습니다.

문자열을 고려해보세요

str="[Title] Some Description"

그럼 전화해

glow "[" "]" "$str"

나머지는 기본 터미널 색상을 유지하면서 대괄호를 파란색으로 표시합니다. 이는 기본 터미널 색상을 사용함 Title을 의미합니다.Some Description

random단어를 파란색으로 색칠하는 또 다른 예에서는

str="This is some random sentence."
glow "random" "$str"

답변1

이것이 당신이 원하는 것입니까?

#!/bin/bash

glow() {
    l=$1
    r=$2
    str=$3

    glow_on='\E[37;46;1m'
    glow_off='\E[0m'

    strl=${str/$l/$glow_on$l}
    strlr=${strl/$r/$r$glow_off}

    echo -e "$strlr"
}       

glow "[" "]" "[Title] Some Description"

답변2

최근 Bash(지원됨 patsub_replacement, 아마도 5.2를 의미함)에서는 다음과 같이 작동할 수 있습니다.

color_me_blue() {
    blue=$'\e[1;34m'
    normal=$'\e[0m'
    pattern="$1"
    string="$2"
    string=${string//$pattern/$blue&$normal}
    echo "$string"
}

color_me_blue '[][]' '[hello] there'
str="This is some random sentence."
color_me_blue 'random' "$str"

첫 번째 인수는 쉘 패턴으로 처리되며 or와 [][]일치하는 인수입니다 [(세 문자 중 하나와 일치하는 것과 동일 ]).[abc]

교체된 문자열을 다시 제자리에 배치하는 데 대한 지원이 없으면 더 어렵습니다. 따라서 오래된 Bash의 경우 비용을 지불해야 한다고 생각합니다 sed.

sed_me_blue() {
    blue=$'\e[1;34m'
    normal=$'\e[0m'
    regex="$1"
    string="$2"
    string="$(sed -e "s/$regex/$blue&$normal/" <<< "$string")"
    echo "$string"
}

패턴이 sed 코드에 포함되어야 하기 때문에 이는 더 취약합니다. 적어도 따옴표가 없는 슬래시는 문제를 일으키며 거기에도 주입 취약점이 있을 수 있습니다. 또한 여기서 패턴은 쉘 패턴이 아닌 정규식이므로 [][].

관련 정보