Bash 기능은 특정 줄을 파란색으로 인쇄합니다.

Bash 기능은 특정 줄을 파란색으로 인쇄합니다.

다음 기능을 이해하는 데 어려움을 겪고 있습니다. 로 시작 -하거나 를 사용하여 {-선을 색칠 해야 합니다 blue. 일치하지 않는 줄을 계속 인쇄하려면 어떻게 해야 합니까?

kls ()
 {
  rst='tput sgr0'
  ctp='tput bold; tput setaf 39'
  sed -E "s/^ *\{?-.*/${ctp}; printf '%s' '&';${rst}/e" <<< "$@"
 }

답변1

코드의 두 변수에는 rst셸 명령이 포함되어 있습니다. 대체 명령에 대한 GNU 호출에서 안전하지 않은 옵션을 제거 ctp할 수 있기 때문에 이러한 명령의 출력을 포함시키는 것이 더 나을 것입니다 ./esed

kls () {
    local ctp="$( tput bold; tput setaf 39 )"
    local rst="$( tput sgr0 )"
    sed -E "s/^ *\{?-.*/${ctp}&${rst}/" <<< "$@"
}

이 질문은 어떻게 되는지 묻는 것 같습니다.피하다일치하지 않는 줄을 인쇄합니다. 이 경우 편집 스크립트 끝에 있는 각 줄의 기본 출력을 비활성화하는 -nwith 옵션을 사용하여 이 작업을 수행합니다. sed그런 다음 /p교체 명령에 옵션을 추가하면 대체된 수정된 줄이 출력됩니다(정규식과 일치하지 않는 줄은 출력되지 않습니다).

kls () {
    local ctp="$( tput bold; tput setaf 39 )"
    local rst="$( tput sgr0 )"
    sed -E -n "s/^ *\{?-.*/${ctp}&${rst}/p" <<< "$@"
}

필터처럼 만들려면 리디렉션을 다음 위치에 넣으세요 sed.

kls () {
    local ctp="$( tput bold; tput setaf 39 )"
    local rst="$( tput sgr0 )"
    sed -E -n "s/^ *\{?-.*/${ctp}&${rst}/p"
}

당신은 그것을 사용할 수 있습니다

printf '%s\n' "some" "strings" | kls

또는

kls <some-file

또는

some-general-command | kls

관련 정보