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

ffvjumwh  于 5个月前  发布在  Unix
关注(0)|答案(3)|浏览(75)

我有一个文件,其中有10000+记录。有一些坏的记录,其中有/”之间的值如下。这是逗号delimeter文件。我不能使用-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"

ecbunoof

ecbunoof1#

假设您只需要将字符串\"替换为空字符串,则以下sed命令应该可以工作:

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

字符串
如果你只想在第14列中这样做,你可以使用awk;

awk  'BEGIN {FS=","; OFS=",";} {gsub(/\\"/, "", $14); print}' filename

klr1opcd

klr1opcd2#

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

另请参阅:

hgncfbus

hgncfbus3#

这可能对你有用:

sed ':a;s/^\(\([^,]*,\)\{13\}[^,]*\)\\"/\1/;ta' file

字符串
向后迭代第14个字段,删除每个\"并返回结果。

相关问题