目标
我想用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全码
bash.sh
WHITE="\e[1;37m"
COLOR="\e[1;31m"
awk -v COLOR="${COLOR}" WHITE="${WHITE}" awk -v COLOR="$COLOR" -v WHITE="$WHITE" '
{
system("sleep 0.1")
print " ("COLOR" NR "WHITE") " $0
}
' settings.tropxsettings.tropx文件:
some setting
some other setting
set ting
another setting最终
这个错误指的是什么,我如何修复它?
发布于 2022-04-30 08:50:02
请您试一下:
#!/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") " $0
}
' settings.tropx我们需要使用ANSI引用带有bash的$'..'来包含转义序列。但是,如果您没有使用-v机制的特定原因,也可以这样说:
awk '
BEGIN {COLOR="\033[1;31m"; WHITE="\033[1;37m"}
{
system("sleep 0.1")
print " ("COLOR NR WHITE") " $0
}
' settings.tropx发布于 2022-04-30 21:30:49
即使原始shell变量使用\e表示法,您也可以使用awk修复它:
__w__="${WHITE}" \
__c__="${COLOR}" \
mawk '
BEGIN { FS = "\\\\\e"
OFS = "\33"
$(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
0000017https://stackoverflow.com/questions/72066825
复制相似问题