如何在awk中转义{}?

时间:2018-11-01 14:27:11

标签: linux bash awk

我有很多输入行,如下所示,在这里我希望得到类似以下的输出

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

我尝试通过'\{'对其进行转义,但不起作用。

问题

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

2 个答案:

答案 0 :(得分:5)

您无需逃避括号。您需要引用它们并避免使用双引号。

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

答案 1 :(得分:4)

  1. 双引号内的文本是文本。不在double qoutes内的文本是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}" }'