将双引号添加到逗号分隔列表的项目中

时间:2015-04-14 08:18:18

标签: awk sed grep

我想在目录中添加一个充满文件的双引号。转型如下:

INSERT INTO %T (colA, colB)更改为INSERT INTO %T ("colA", "colB")

我尝试过使用sed的各种示例。我能够grep识别文件和行号。你能告诉我如何在不手动修改文件的情况下实现这个目的吗?

3 个答案:

答案 0 :(得分:1)

这可能会:

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")"}'

EKS:

echo 'INSERT INTO %T (colA, colB, colC)' | 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")"}'
INSERT INTO %T ("colA", "colB", "colC")

答案 1 :(得分:1)

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
  • 自我解释。
  • 假设该结构没有内部()且只有一组()

答案 2 :(得分:0)

使用awk的另一种方法

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

输出

INSERT INTO %T ("colA", "colB")