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

Shell 如何删除双引号之间的双引号,shell,powershell,unix,Shell,Powershell,Unix,如何删除一组双引号之间的双引号 “Test T”est”应作为“Test Test” “Test T”est、“Test1”Test1“应以“Test Test”、“Test1 Test1”的形式获得输出您可以使用awk进行尝试: $ awk -F", *" '{ # Set the field separator for(i=1;i<=NF;i++){ # Loop through all

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

“Test T”est”
应作为
“Test Test”


“Test T”est、“Test1”Test1“
应以
“Test Test”、“Test1 Test1”的形式获得输出

您可以使用
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"
$awk-F“,*”{#设置字段分隔符

对于(i=1;i您可以尝试使用
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"
$awk-F“,*”{#设置字段分隔符

对于(i=1;i如果这是一个已损坏的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'
部分。

如果这是一个已损坏的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'
部分。

因此,如果这是针对损坏的CSV,您可以将问题声明为删除任何不出现在行首或行尾且不靠近逗号的双引号(可选空白)。因此,使用Powershell正则表达式很容易做到这一点,如下所示:

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

$t-替换“(?因此,如果这是针对损坏的CSV,您可以将问题声明为删除任何不出现在行首或行尾且不靠近逗号的双引号(带有可选空格)。因此,可以使用Powershell正则表达式轻松完成此操作,如:

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

$t-用sed替换“(?替代方案:

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

"Test T"est"
"Test T"est", "Test1 "Test1"
输出:

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

sed的替代方案:

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

"Test T"est"
"Test T"est", "Test1 "Test1"
输出:

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

机器不可能过滤掉未替换的双引号,特别是在第二个示例中。它应该如何知道要删除哪个双引号?但是如果存在模式(例如每个字符串不应存在的最大双引号:1)您可以编写一个脚本来删除第二个双引号,然后每三个双引号删除一次。计算机不可能筛选出未经筛选的双引号,特别是在第二个示例中。如何知道要删除哪个双引号?但是如果存在模式(例如每个字符串不应存在的最大双引号:1)您可以编写一个脚本来删除第二个双引号,然后每三个双引号删除一个。我们得到的是.dat,其中包含数据,与数据中的“between”分开,处理时出现givinf错误,因此我们需要删除“between”然后处理我们获得的.dat文件,其中包含数据,与数据中的“between”分开,处理时出现givinf错误,因此需要删除“between”然后处理.dat文件这应该在GNU的sed中工作,对于BSD的sed,请尝试使用选项
-E
-r
,例如
sed-E/../../../../g'输入文件
这应该在GNU的sed中工作,对于BSD的sed,请尝试使用选项
-E
-r
,例如
sed-E/../../../g'输入文件