다음 기능을 이해하는 데 어려움을 겪고 있습니다. 로 시작 -
하거나 를 사용하여 {-
선을 색칠 해야 합니다 blue
. 일치하지 않는 줄을 계속 인쇄하려면 어떻게 해야 합니까?
kls ()
{
rst='tput sgr0'
ctp='tput bold; tput setaf 39'
sed -E "s/^ *\{?-.*/${ctp}; printf '%s' '&';${rst}/e" <<< "$@"
}
답변1
코드의 두 변수에는 rst
셸 명령이 포함되어 있습니다. 대체 명령에 대한 GNU 호출에서 안전하지 않은 옵션을 제거 ctp
할 수 있기 때문에 이러한 명령의 출력을 포함시키는 것이 더 나을 것입니다 ./e
sed
kls () {
local ctp="$( tput bold; tput setaf 39 )"
local rst="$( tput sgr0 )"
sed -E "s/^ *\{?-.*/${ctp}&${rst}/" <<< "$@"
}
이 질문은 어떻게 되는지 묻는 것 같습니다.피하다일치하지 않는 줄을 인쇄합니다. 이 경우 편집 스크립트 끝에 있는 각 줄의 기본 출력을 비활성화하는 -n
with 옵션을 사용하여 이 작업을 수행합니다. 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