启动两个颜色变量后 awk 命令中的转义序列错误
Escape sequence error within awk command after initiating two color variables
我想遍历我的文件和所有使用 awk 的文件,它工作正常,但是当试图插入我的 COLOR
和 WHITE
变量时,我意识到我必须首先在像这样的 awk 命令:-v COLOR="${COLOR}"
和 WHITE="${WHITE}"
。然而,当我这样做时,我开始收到以下错误:
awk: warning: escape sequence `\e' treated as plain `e'
awk: cmd. line:1: WHITE=\e[1;37m
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: WHITE=\e[1;37m
awk: cmd. line:1: ^ syntax error
完整代码:
WHITE="\e[1;37m"
COLOR="\e[1;31m"
awk -v COLOR="${COLOR}" WHITE="${WHITE}" '{system("sleep 0.1");print " (COLOR" NR "WHITE) " [=11=] }' < settings.tropx
settings.tropx 文件:
some setting
some other setting
set ting
other setting
请解释这可能是什么原因以及我该如何解决,谢谢!
你要不要试试:
#!/bin/bash
WHITE=$'\e[1;37m'
COLOR=$'\e[1;31m'
awk -v COLOR="$COLOR" -v WHITE="$WHITE" '
{
system("sleep 0.1")
print " ("COLOR NR WHITE") " [=10=]
}
' settings.tropx
我们需要使用 ANSI 引用 $'..'
和 bash 来包含转义序列。但是如果你没有特定的理由使用-v
机制,你也可以说:
awk '
BEGIN {COLOR="3[1;31m"; WHITE="3[1;37m"}
{
system("sleep 0.1")
print " ("COLOR NR WHITE") " [=11=]
}
' settings.tropx
即使您原来的 shell 变量使用 \e
表示法,您也可以使用 awk 来修复它:
__w__="${WHITE}" \
__c__="${COLOR}" \
mawk '
BEGIN { FS = "\\\e"
OFS = ""
$(ORS = "") = ENVIRON["__w__"]"1"ENVIRON["__c__"]
print $!(NF = NF) }'
0000000 993090331 829241139 993090331 7156019
033 [ 1 ; 3 7 m 1 033 [ 1 ; 3 1 m
033 133 061 073 063 067 155 061 033 133 061 073 063 061 155
esc [ 1 ; 3 7 m 1 esc [ 1 ; 3 1 m
27 91 49 59 51 55 109 49 27 91 49 59 51 49 109
1b 5b 31 3b 33 37 6d 31 1b 5b 31 3b 33 31 6d
0000017
我想遍历我的文件和所有使用 awk 的文件,它工作正常,但是当试图插入我的 COLOR
和 WHITE
变量时,我意识到我必须首先在像这样的 awk 命令:-v COLOR="${COLOR}"
和 WHITE="${WHITE}"
。然而,当我这样做时,我开始收到以下错误:
awk: warning: escape sequence `\e' treated as plain `e'
awk: cmd. line:1: WHITE=\e[1;37m
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: WHITE=\e[1;37m
awk: cmd. line:1: ^ syntax error
完整代码:
WHITE="\e[1;37m"
COLOR="\e[1;31m"
awk -v COLOR="${COLOR}" WHITE="${WHITE}" '{system("sleep 0.1");print " (COLOR" NR "WHITE) " [=11=] }' < settings.tropx
settings.tropx 文件:
some setting
some other setting
set ting
other setting
请解释这可能是什么原因以及我该如何解决,谢谢!
你要不要试试:
#!/bin/bash
WHITE=$'\e[1;37m'
COLOR=$'\e[1;31m'
awk -v COLOR="$COLOR" -v WHITE="$WHITE" '
{
system("sleep 0.1")
print " ("COLOR NR WHITE") " [=10=]
}
' settings.tropx
我们需要使用 ANSI 引用 $'..'
和 bash 来包含转义序列。但是如果你没有特定的理由使用-v
机制,你也可以说:
awk '
BEGIN {COLOR="3[1;31m"; WHITE="3[1;37m"}
{
system("sleep 0.1")
print " ("COLOR NR WHITE") " [=11=]
}
' settings.tropx
即使您原来的 shell 变量使用 \e
表示法,您也可以使用 awk 来修复它:
__w__="${WHITE}" \
__c__="${COLOR}" \
mawk '
BEGIN { FS = "\\\e"
OFS = ""
$(ORS = "") = ENVIRON["__w__"]"1"ENVIRON["__c__"]
print $!(NF = NF) }'
0000000 993090331 829241139 993090331 7156019
033 [ 1 ; 3 7 m 1 033 [ 1 ; 3 1 m
033 133 061 073 063 067 155 061 033 133 061 073 063 061 155
esc [ 1 ; 3 7 m 1 esc [ 1 ; 3 1 m
27 91 49 59 51 55 109 49 27 91 49 59 51 49 109
1b 5b 31 3b 33 37 6d 31 1b 5b 31 3b 33 31 6d
0000017