我有一些CSV文件,其中有一些字符串字段由双引号包围。问题是其中一些字段只是人们引入的解释或注解,所以可能有一些非ASCII(或Unicode)字符,我的加载过程不喜欢,也可能有双引号。
我想删除所有非ASCII字符和一些双引号。文件的引号是|
,所以我想删除所有不在管道之前或之后的双引号。我花了一些时间寻找一个类似的问题,但我找到的所有问题都是不同的,所以如果我问的问题已经有答案了,请原谅。
输入文件示例:
SEP-23|3958|106xxx|Anonymous Account||IE - IT|000|000000|000|DEFAULT|"TI805 ""¬PID35032 â¿""" AWS Migration""|0000
我想要这样的结果行
SEP-23|3958|106xxx|Anonymous Account||IE - IT|000|000000|000|DEFAULT|"TI805 PID35032 AWS Migration"|0000
我正在运行一个sed命令,有时候它会起作用,但是我必须运行 x 次来替换所有的双引号,在这种情况下它不起作用,不确定是因为非ASCII字符还是其他原因
sed -i 's/\([^|]\)"\([^|]\)/\1\2/g' sample.csv
3条答案
按热度按时间7rfyedvj1#
这样的东西似乎对您的测试用例起作用。
在你有一个可以工作的脚本之前,可能不要使用
sed -i
(通常甚至在那之后也不会使用)。你的尝试似乎甚至没有尝试做任何关于非ASCII字符等。一个合适的解决方案是将mojibake恢复为有用的文本,或者理想情况下让原始源提供没有mojibake的数据,但通常情况下,船已经启航,你必须用你已经拥有的东西做你能做的事情。
kfgdxczn2#
使用
sed
gg0vcinb3#
使用GNU
sed
:(删除所有非ASCII字符和2个非
|
字符之间的所有双引号字符串)。演示: