【问题标题】:sed Pattern to Insert Comma between double Quotessed 模式在双引号之间插入逗号
【发布时间】:2018-02-08 16:33:04
【问题描述】:

我对 sed 正则表达式模式非常陌生,并且坚持要求。我从数据库中提取的记录很少

“姓名”“年龄”“来自 ABC”“12”

现在我将它导出为逗号分隔的 CSV 我正在使用's/[[:space:]]\+/,/g'这个正则表达式

这给了我结果

“姓名”、“年龄”、“发件人、ABC”、“12”

除了在第三列插入 , 以获得空间之外,这很好 现在我想在双引号之间插入 ,

任何人都可以指导我吗?

使用's/"[[:space:]]\+"/","/g' 正则表达式我能够获得"Name","Age","From,ABC","12" 但是当我拥有"Name","","From,ABC","12" 时它失败了,它给出了"Name",",","From,ABC","12"

还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: bash shell unix sed


    【解决方案1】:

    " " 替换为","

    sed 's/"[[:space:]]\+"/","/g'
    

    已编辑以捕获多个空格

    【讨论】:

    • 这是替换所有“”这是我从 ABC 12 得到的姓名年龄
    • 您要删除外部的单引号吗?您可以尝试:sed 's/\"[[:space:]]\+\"/\",\"/g'
    • @AnupamAlok:你是如何应用这个命令的? echo '"Name","Age","From,ABC","12"' | sed 's/" "/","/g' 为我生成 "Name","Age","From,ABC","12"。
    • @AnupamAlok:这个sed 命令会给出"Name"," ","From ABC ","12" 这不正确吗?
    • sed 's/"[[:space:]]\+"/","/g' 是正确的并回答了我的问题,但是当我的数据类似于 "Name" " " "From ABC " "12" 第二列为空白时出现问题。结果是"Name",",","From ABC ","12" 我想要"Name"," ","From ABC","12"
    【解决方案2】:

    我会这样做:

    echo \"Name\"     \"Age\" \"From ABC\" \"12\" | sed -e 's/"[[:space:]]\+"/","/g'
    

    返回

    "Name","Age","From ABC","12"
    

    编辑

    如果你想要空字符串 " " 也匹配,那么你可以这样做:

    $ echo \"Name\" \" \"    \"Age\" \"From ABC\" \"12\" | sed -e 's/\("[[:alnum:][:space:]]*"\)/\1,/g' \
        -e 's/",[[:space:]]\+/",/g' \
        -e 's/,[[:space:]]\?$//g'
    

    返回

    "Name"," ","Age","From ABC","12"
    

    第一个规则匹配引号中的字符串(也可能为空),第二个规则 规则删除, 和下一个" 之间的空格,第三条规则删除 最后一个,

    【讨论】:

    • 您在评论中使用反引号吗?很难分辨什么是空白,什么不是。
    • 谢谢它实际上有效,但是当我的专栏返回 " " 时它失败了,就像第二列的 "Name" " " "From ABC " "12" 一样,它也进行了不需要的解析。我希望它像 "Name"," ","From ABC","12" 但它确实返回了 "Name",",","From ABC ","12" 抱歉没有使用反引号。
    • @AnupamAlok 我更新了我的答案,解决了引号中匹配的空字符串" "
    【解决方案3】:

    这可能对你有用(GNU sed):

    sed -r 's/\s+$//;s/("[^"]*(\\.[^"]*)*")\s+/\1,/g' file
    

    删除行尾的所有空格。然后全局替换任何一对双引号字符串,后跟一个空格,字符串后跟一个逗号。

    注意这适用于带引号的字符串中的带引号的字符(包括双引号)。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多