启动两个颜色变量后 awk 命令中的转义序列错误

Escape sequence error within awk command after initiating two color variables

我想遍历我的文件和所有使用 awk 的文件,它工作正常,但是当试图插入我的 COLORWHITE 变量时,我意识到我必须首先在像这样的 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