删除csv bash中的双引号

时间:2020-03-09 12:30:58

标签: bash csv command-line

我遇到以下问题:

我的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”

对于某些提示,我将不胜感激。谢谢

3 个答案:

答案 0 :(得分:0)

让您入门:

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

输出

enter image description here

您可以将其调整为逐行遍历一个文件(而不是第一个echo并输出到另一个文件中

答案 1 :(得分:0)

假设您的输入看起来像这样:

"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"

如果您有特殊字符,则只需将其替换为代码,例如:

$ 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”

尽管我认为此输入是您问题中的转置错误。

答案 2 :(得分:0)

使用MediaDto

sed

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

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

相关问题