【问题标题】:Delete double quotes in csv bash删除csv bash中的双引号
【发布时间】:2020-03-09 12:30:58
【问题描述】:

我遇到以下问题:

我的 csv 文件中的数据如下所示:

“1,””name””,””surname””,””age””,””city”””
“2,””Peter””,””Parker””,””30””,””NY”””
“3,””marry””,””Jane””,””30””,””NY”””

是否可以使用 bash 从每行中删除第一个和最后一个双引号,然后从其中的每个字段中删除第一个和最后一个双引号? 要得到这样的东西:

1,”name”,”surname”,”age”,”NY”
3,”marry”,”Jane”,”30”,”NY”

我会很感激一些提示。谢谢

【问题讨论】:

  • 欢迎来到 SO,在 SO 上,我们鼓励用户添加他们为解决自己的问题而付出的努力,所以请添加相同的内容并让我们知道。
  • 这些是 " 还是 "? 结尾行也是三个而不是两个。
  • 这些是 " ,是的,最后有三个,但是你可以看到第一个带数字的字段没有结束的字段
  • 第二行怎么了?
  • 这看起来像一个单列 CSV 文件,其中每个字段本身都是 CSV 文件中的一行。是什么生成了文件?

标签: bash csv command-line


【解决方案1】:

让您开始:

echo '"1,""name"",""surname"",""age"",""city"""' | sed "s/\"\"/\"/g" | sed 's/^\"\(.*\)\"$/\1/'

输出

你可以接受它,调整它以逐行运行文件(而不是第一个 echo 并输出到另一个文件中)

【讨论】:

    【解决方案2】:

    假设您的输入如下所示:

    "1,""name"",""surname"",""age"",""city"""
    "2,""Peter"",""Parker"",""30"",""NY"""
    "3,""marry"",""Jane"",""30"",""NY"""
    

    请注意您的代码中实际的 " 不是 ””

    然后您可以 sed 多个事物并将它们链接在一起,例如

    sed -e "s/\"\"\"/\"/g" -e "s/\"\"/\"/g" input.txt
    

    这首先替换了三引号""",将它们减少为双引号"",然后进一步减少它们。

    最终输出:

    "1,"name","surname","age","city"
    "2,"Peter","Parker","30","NY"
    "3,"marry","Jane","30","NY"
    

    如果您有特殊字符,则只需在代码中替换它们,例如:

    $ cat input.txt
    “1,””name””,””surname””,””age””,””city”””
    “2,””Peter””,””Parker””,””30””,””NY”””
    “3,””marry””,””Jane””,””30””,””NY”””
    $ sed -e "s/\”\”\”/\”/g" -e "s/\”\”/\”/g" input.txt
    “1,”name”,”surname”,”age”,”city”
    “2,”Peter”,”Parker”,”30”,”NY”
    “3,”marry”,”Jane”,”30”,”NY”
    

    虽然我认为这个输入是您问题中的转置错误。

    【讨论】:

      【解决方案3】:

      使用sed

      sed 's/^"\(.*\)"$/\1/;s/"\+/"/g' file
      

      第一次替换删除了整行的外部双引号。

      第二次替换将参数引号替换为仅一个双引号。

      【讨论】:

        猜你喜欢
        • 2017-02-13
        • 2014-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 2015-07-26
        相关资源
        最近更新 更多