首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash中初始化awk命令中的变量时出错

在bash中初始化awk命令中的变量时出错
EN

Stack Overflow用户
提问于 2022-04-30 08:21:04
回答 2查看 81关注 0票数 1

目标

我想用awk迭代我的文件,这很好,但是当尝试插入我的COLORWHITE变量时。

我意识到我必须首先在awk命令中初始化它,比如:-v COLOR="${COLOR}"WHITE="${WHITE}"。然而,当我这样做时,我开始得到以下错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
some setting
some other setting
set ting
another setting

最终

这个错误指的是什么,我如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-30 08:50:02

请您试一下:

代码语言:javascript
复制
#!/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机制的特定原因,也可以这样说:

代码语言:javascript
复制
awk '
    BEGIN {COLOR="\033[1;31m"; WHITE="\033[1;37m"}
    {
        system("sleep 0.1")
        print "    ("COLOR NR WHITE") " $0
    }
' settings.tropx
票数 1
EN

Stack Overflow用户

发布于 2022-04-30 21:30:49

即使原始shell变量使用\e表示法,您也可以使用awk修复它:

代码语言:javascript
复制
 __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    

0000017
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72066825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档