![bash 脚本中 awk printf 无效](https://linux22.com/image/216885/bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%20awk%20printf%20%E6%97%A0%E6%95%88.png)
为什么构建无效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)
函数来代替文字匹配prl。
您还可以使用常规 awk 正则表达式匹配来代替 match() 之类$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 }
' <<< "$@"