ビルドが機能しないのはなぜですか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()関数の2番目の改善は正規表現です。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 }
' <<< "$@"