Awk 在逗号分隔列表的项目中添加双引号

Awk 在逗号分隔列表的项目中添加双引号,awk,sed,grep,Awk,Sed,Grep,我想添加双引号一个目录中的文件全部到位。转换如下所示: 插入到%T(可乐、可乐)更改为插入到%T(“可乐”、“可乐”) 我使用sed尝试了各种示例。我能够通过grep识别文件和行号。您能告诉我如何在不手动修改文件的情况下就地实现此功能吗?这可能会: awk -F"[()]" '{n=split($(NF-1),a,", *");for (i=1;i<n;i++) s=s sprintf("\"%s\", ",a[i]);s=s "\""a[n]"\"";print $1 "("s")"}'

我想添加双引号一个目录中的文件全部到位。转换如下所示:

插入到%T(可乐、可乐)
更改为
插入到%T(“可乐”、“可乐”)

我使用
sed
尝试了各种示例。我能够通过
grep
识别文件和行号。您能告诉我如何在不手动修改文件的情况下就地实现此功能吗?

这可能会:

awk -F"[()]" '{n=split($(NF-1),a,", *");for (i=1;i<n;i++) s=s sprintf("\"%s\", ",a[i]);s=s "\""a[n]"\"";print $1 "("s")"}'
awk-F“[()]”,{n=split($(NF-1),a,“,*”);for(i=1;i
联机版本(不带筛选器,并假定空格字符为空格):

  • 自我解释
  • 假设该结构没有内部
    ()
    ,只有一组
    ()
    • awk的另一种方式

      awk -F"(" -vOFS="(" '{gsub(/[^, )]+/,"\"&\"",$2)}1' file
      

      输出
      (…)
      中有多少个参数?其中可能有任意数量的colX。为了补充@AvinashRaj问题:是否只有一组
      ()
      ,如果不是的话,里面的所有参数是否都应该被引用?哦,该死。你是对的,在这种情况下,隔离甚至没有必要。请注意,我会排除标识符列表周围和逗号两侧的空格,如
      sed的s/(\s*/&/;s/\s*)/“&/;s/\s*,\s*/”&“/g'
      。确切地说,我尝试了与您几乎相同的方法,当我放回隔离的部分时,我发现只有当其他
      ()
      出现在主
      ()
      ,因此假设没有,隔离就没用了。如果内部参数更复杂,代码仍然非常有用。您的意思是,如果参数列表之外的代码更复杂(如果它可能受到转换的影响),则代码更有用。如果参数列表本身更复杂,那么在隔离它之后,仍然会有复杂性。无论如何:当我使用的技巧有用时,会有一些上下文,但我不认为这不是其中之一。事实上,两者都是。当从外部隔离时,内部复杂性可能更容易处理(主要用于正则表达式构造)并且可以允许(举例来说)带有
      ()
      的函数。无论如何,它取决于请求和约束:-)
      sed '
      # Filter to insert only
         /INSERT INTO/ !b
      # Add first and last " inside ()
         s/(/("/
         s/)[^)]*$/")/
      # add all internal " around each ,
         s/,[[:space:]]*/","/g
      ' YourFile
      
      sed 's/(/("/;s/)[^)]*$/")/;s/, */","/g' YourFile
      
      awk -F"(" -vOFS="(" '{gsub(/[^, )]+/,"\"&\"",$2)}1' file
      
      INSERT INTO %T ("colA", "colB")