如何删除双引号之间的双引号

时间:2018-03-22 07:45:12

标签: shell powershell unix

如何删除一组双引号之间的双引号?

"Test T"est"应输出为"Test Test"

"Test T"est", "Test1 "Test1"应输出为"Test Test", "Test1 Test1"

4 个答案:

答案 0 :(得分:1)

您可以尝试awk

$ awk -F", *" '{                           # Set the field separator
  for(i=1;i<=NF;i++){                      # Loop through all fields
     $i="\""gensub("\"", "", "g", $i)"\""  # Rebuild the field with only surrounding quotes
  }
}1' OFS="," file                           # Print the line 
"Test Test","Test1 Test1"

答案 1 :(得分:1)

如果这是一个损坏的CSV,并且您可以说字段中没有逗号,那么PowerShell的CSV处理将读取它们并保留尾随引号。删除它,然后重新导出到新的CSV以获取带有双引号的值。

import-csv .\test.csv -Header 'column1', 'column2' | 
    ForEach-Object {

        foreach ($column in $_.psobject.properties.Name)
        {
          $_.$column = $_.$column.Replace('"', '') 
        }

        $_ 

     } | Export-Csv .\test2.csv -NoTypeInformation

如果文件中包含标题,请删除-header 'column1', 'column2'部分。

答案 2 :(得分:1)

因此,如果这是针对损坏的CSV,则可以将问题说明为删除不会出现在行的开头或结尾且不在逗号附近的双引号(带有可选的空格)。所以这可以通过像这样的Powershell正则表达式轻松完成:

$t = '"Test T"est", "Test1 "Test1"'
$t -replace '(?<!^|\s*,\s*)"(?!\s*,\s*|$)', ''

答案 3 :(得分:0)

sed的另一种选择:

sed 's/\("[^"]\+\)"\([^"]\+"\)/\1\2/g' inputFile

输入:

"Test T"est"
"Test T"est", "Test1 "Test1"

输出:

"Test Test"
"Test Test", "Test1 Test1"