如果 csv 行中有超过 x 个管道,则删除第二个实例

如果 csv 行中有超过 x 个管道,则删除第二个实例

我有一个 csv 文件,应该包含 4 列数据,其中包括产品编号、标题、网址和价格。每列都由|分隔符分隔(必须维护这一点,还有其他原因导致我无法切换到替代分隔符,我不会在此处讨论)。从底部条目(这是本示例中的问题条目)中可以看出,标题包含一个管道,它破坏了模式,如果需要将数据导入数据库,则可能会导致问题。

5456435121|The making of the blue album|https://www.example1.co.uk|55
1321354567|Wow this example has no imagination|https://www.cherrypickers.co.uk|89
5456456456|King of the Barbarians | Last Man Standing|https://www.babarians.co.uk|79

我想知道的是,如何运行一个可以有效分析文件的命令,并且对于有超过 3 个管道的每一行(即标题包含一个管道的每一行),然后删除其中的第二个线。如果标题中存在一个或多个管道,这将有效地允许我删除管道。我不知道如何实现它。

我希望文件在处理后看起来像这样:

5456435121|The making of the blue album|https://www.example1.co.uk|55
1321354567|Wow this example has no imagination|https://www.cherrypickers.co.uk|89
5456456456|King of the Barbarians Last Man Standing|https://www.babarians.co.uk|79

答案1

sed -r ':;s/(\|.*)\|(.*\|.*\|)/\1\2/;t'

删除前面有一个、后面有两个管道的每个管道。

如果您想就地编辑文件,请使用-i选项。

相关内容