使用awk在文本中添加特殊字符

使用awk在文本中添加特殊字符,awk,Awk,我有一个文件是: line1 line2 line3 我想要的是 "line1"{ "line1" } 我试图用awk来做这件事,但我不知道如何使用特殊字符。现在我有这个 awk '{ "$0" {"$0"} }' -v q='”将双引号字符保存在名为q的变量中,这样可以更容易地插入双引号,而不是使用转义符 ql=q$0 q这会在输入记录周围添加双引号 ql“{”ORS ql ORS“}”必需的输出,ORS是输出记录分隔符,默认为换行符 如果忽略不同参数之间的空格,请使用“}”在输

我有一个文件是:

line1
line2
line3
我想要的是

"line1"{
"line1"
 }
我试图用awk来做这件事,但我不知道如何使用特殊字符。现在我有这个

awk '{ "$0" {"$0"} }' 
  • -v q='”
    将双引号字符保存在名为
    q
    的变量中,这样可以更容易地插入双引号,而不是使用转义符
  • ql=q$0 q
    这会在输入记录周围添加双引号
  • ql“{”ORS ql ORS“}”
    必需的输出,
    ORS
    是输出记录分隔符,默认为换行符
    • 如果忽略不同参数之间的空格,请使用
      “}”
      在输出中的
      }
      之前获得空格

    • 您只需使用
      printf

      awk -v fmt='"%s"{\n"%s"\n}\n' '{printf fmt, $0,$0 }' file
      
      使用您的数据进行测试:

      kent$  awk -v fmt='"%s"{\n"%s"\n}\n' '{printf fmt, $0,$0 }' f
      "line1"{
      "line1"
      }
      "line2"{
      "line2"
      }
      "line3"{
      "line3"
      }
      

      sed

      $ sed 's/.*/"&"{\n"&"\n}/' file
      
      "line1"{
      "line1"
      }
      "line2"{
      "line2"
      }
      "line3"{
      "line3"
      }
      
      另一个
      awk

      $ awk -v OFS="\n" -v q='"' '{v=q $0 q; print v "{", v, "}" }' file
      

      通常,使用反斜杠对特殊字符进行转义。请对预期输出使用代码标记,它也将显示为单行而不是多行。另外,您能否解释转换过程?是否只转换第一行而忽略其他行?etcI希望转换每一行。我希望有:“”line1“”{”第1行“”}
      $ awk -v OFS="\n" -v q='"' '{v=q $0 q; print v "{", v, "}" }' file
      
      $ awk '{$0="\""$0"\""; print $0 "{\n" $0 "\n}"}' file
      "line1"{
      "line1"
      }
      "line2"{
      "line2"
      }
      "line3"{
      "line3"
      }