【问题标题】:error with initiating varibles within an awk command in bash在 bash 中的 awk 命令中启动变量时出错
【发布时间】:2022-10-15 19:55:18
【问题描述】:

目标

我想用 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

完整代码

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.tropx

settings.tropx 文件:

some setting
some other setting
set ting
another setting

最后

请解释这个错误指的是什么以及我如何解决它,谢谢!

【问题讨论】:

  • 使用\033 而不是\e,例如WHITE="\033[1;37m" 简单检查:awk 'BEGIN { color="\033[1;34m"; nocolor="\033[0m"; print color "hello" nocolor } -- 如果在 VT100 兼容终端上,将以 {蓝色} 打印 "hello"
  • 这是给你的颜色检查awk 'BEGIN { for (i=30; i<38; i++) { color="\033[1;"i"m"; nocolor="\033[0m"; print i " " color "hello" nocolor }}'
  • 完成颜色输出后,不要忘记输出nocolor="\033[0m" 以将输出重置为默认值。

标签: bash shell awk script


【解决方案1】:

请你试试:

#!/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="[1;31m"; WHITE="[1;37m"}
    {
        system("sleep 0.1")
        print "    ("COLOR NR WHITE") " $0
    }
' settings.tropx

【讨论】:

  • 我确实需要-v mech。因为当我这样想时,这两个值可能会变成不同的颜色
  • 我收到了这个错误:awk: warning: escape sequence `e' treated as plain `e' (e[1;31m1e[1;37m) Debug Mode : OFF | (ON) (e[1;31m2e[1;37m) Animations : (ALL) | SOME | NONE (e[1;31m3e[1;37m) Default Scripts : (SHOW) | HIDE
  • 您是否更改了我的答案中显示的 bash 变量分配? WHITE="e[1;37m" 将不起作用。
  • 我有这些 rn:`WHITE="[1;37m" COLOR="[1;31m"
  • 我马上改
【解决方案2】:

即使您的原始 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2018-01-16
    • 2017-11-25
    • 1970-01-01
    • 2013-01-13
    • 2016-03-19
    相关资源
    最近更新 更多