在 unix shell 脚本 ksh 中替换文件第 14 列中的 /”

问题描述 投票:0回答:2

我有一个文件,其中有 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"
shell unix awk sed ksh
2个回答
0
投票

假设您只想将字符串

\"
替换为空字符串,则以下
sed
命令应该有效:

sed 's/\\"//g' filename

0
投票

使用这个 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
:重复匹配图案。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.