【问题标题】:How to escape {} in awk?如何在 awk 中转义 {}?
【发布时间】:2019-04-05 19:07:23
【问题描述】:

我有许多如下所示的输入行,我希望最终得到与此类似的输出

host tsclient010.tsclient {
   option host-name "tsclient010.tsclient";
   hardware ethernet 00E0C56BF96D;
   fixed-address 192.168.246.10;
}

对于每个输入。但是我遇到了静态内容包含{}的问题。

echo "192.168.246.10 00E0C56BF96D tsclient010.tsclient" | awk '{print
host $3 {
   option host-name "$3";
   hardware ethernet $2;
   fixed-address $1;
}
}'

输出:

awk: cmd. line:2:     host $3 {
awk: cmd. line:2:             ^ syntax error

我曾尝试通过'\{' 转义它,但不起作用。

问题

有人知道如何转义所需的字符吗?

【问题讨论】:

标签: linux bash awk


【解决方案1】:
  1. 双引号内的文本是文本。不在双引号内的文本是 awk 脚本。
  2. 换行符分隔 awk 命令。

你可以:

echo "192.168.246.10 00E0C56BF96D tsclient010.tsclient" | awk '{
    print "host "$3" {"
    print "option host-name \""$3"\";"
    print "hardware ethernet "$2";"
    print "fixed-address "$1";"
    print "}"
}'

echo "192.168.246.10 00E0C56BF96D tsclient010.tsclient" | awk '{
    print "host "$3" {\noption host-name \""$3"\";\nhardware ethernet "$2";\nfixed-address "$1";\n}" }'

【讨论】:

    【解决方案2】:

    您不需要转义大括号。您需要引用它们并转义双引号。

    awk '{printf "\
    host %s {\
       option host-name \"%s\";\
       hardware ethernet %s;\
       fixed-address %s;\
    }\n", $3, $3, $2, $1
    }'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-11
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多