Linux 如何在awk中逃离{}?

Linux 如何在awk中逃离{}?,linux,bash,awk,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

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

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
我试图通过
“\{”
来逃避它,但没有成功

问题


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

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

awk '{printf "\
host %s {\
   option host-name \"%s\";\
   hardware ethernet %s;\
   fixed-address %s;\
}\n", $3, $3, $2, $1
}'
  • 双引号内的文本是文本。不在双引号内的文本是awk脚本
  • 换行符使用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 "}"
    }'
    


    这可能会有帮助->
    “{
    也许??有很多双引号缺失。这超出了您的需要,但请参阅如何在awk、、等中打印多行文本块。
    echo "192.168.246.10 00E0C56BF96D tsclient010.tsclient" | awk '{
        print "host "$3" {\noption host-name \""$3"\";\nhardware ethernet "$2";\nfixed-address "$1";\n}" }'