빌드가 작동하지 않는 이유는 무엇입니까 printf
?
awk -v frg="$ctp" -v rst="$sgr" -v prl="$rl" \
'{ hit = match($0, /prl/)
if (hit) {
fm="%s%s%s\n" ; printf fm frg $0 rst }
else {
fm="%s\n" ; printf fm $0 }
}' <<< "$@"
답변1
awk -v frg="$ctp" -v rst="$sgr" -v prl="$rl" '
{ hit = match($0, prl)
if (hit) {
fm="%s%s%s\n" ; printf fm, frg, $0, rst }
else {
fm="%s\n" ; printf fm, $0
}
}' <<< "$@"
옳은:
match($0, /prl/)
~이 되다match($0, prl)
printf
매개변수는 쉼표로 구분해야 합니다.
참고: match() 함수의 두 번째 개선 사항은 정규식입니다.index(in, find)
리터럴 매칭을 대체하는 함수프롤.
match() 등 대신 일반 awk 정규식 일치를 사용할 수도 있습니다 $0 ~ prl
(다시, 정규식 일치를 원하고 패턴에 정규식 문자가 없다고 가정하는 경우 /
).
awk -v frg="$ctp" -v rst="$sgr" -v prl="$rl" '
{
if ($0 ~ prl) {
fm="%s%s%s\n" ; printf fm, frg, $0, rst }
else {
fm="%s\n" ; printf fm, $0
}
}' <<< "$@"
마찬가지로 최종적으로 코드를 단순화하면 다음과 같이 작성할 수 있습니다.
awk -v frg="$ctp" -v rst="$sgr" -v prl="$rl" '
{ print ($0 ~ prl ? frg $0 rst: $0 }
' <<< "$@"