我有一个文件,其中有 10000 多条记录。有一些错误记录的值之间有 /" ,如下所示。这是逗号分隔符文件。我无法使用 -E GNU 选项。
"22-11-2020","ABCD",,"ABCD/4400","7644","NY","NY","LAX","ABC","16-09-2023","25-09-2023","02-10-2023","660802","993 14\" X 8\"","28-09-2023",4,"CA",2586,"AA",65.850000,6895.200000,"01-11-2023"
我需要从第 14 列中删除/替换 "。我尝试了下面的命令,但它替换了所有双引号,但不是 \ 。
sed 's/'\"'/''/g' File
需要如下输出:
"22-11-2020","ABCD",,"ABCD/4400","7644","NY","NY","LAX","ABC","16-09-2023","25-09-2023","02-10-2023","660802","993 14 X 8","28-09-2023",4,"CA",2586,"AA",65.850000,6895.200000,"01-11-2023"
假设您只想将字符串
\"
替换为空字符串,则以下 sed
命令应该有效:
sed 's/\\"//g' filename
使用这个 Perl 一行代码:
perl -F, -lane '$F[13] =~ s{\\"}{}g; print join ",", @F;' in_file > out_file
要就地更改文件:
perl -i.bak -F, -lane '$F[13] =~ s{\\"}{}g; print join ",", @F;' in_file > out_file
Perl 单行代码使用这些命令行标志:
-e
:告诉 Perl 查找内联代码,而不是在文件中。-n
:一次循环输入一行,默认将其分配给$_
。-l
:在内联执行代码之前删除输入行分隔符(默认情况下在 *NIX 上为"\n"
),并在打印时附加它。-a
:在空格或 $_
选项中指定的正则表达式上将 @F
拆分为数组 -F
。-F,
:在 @F
上拆分为 ,
,而不是在空白处。-i.bak
:就地编辑输入文件(覆盖输入文件)。覆盖之前,请在其名称后附加扩展名 .bak
来保存原始文件的备份副本。如果您想跳过写入备份文件,只需使用 -i
并跳过扩展名即可。
正则表达式使用此修饰符:
/g
:重复匹配图案。
另请参阅: