sed -r ':;s/(\|.*)\|(.*\|.*\|)//;t'
Exclui todos os canais que são precedidos por um e seguidos por dois canais.
Se você quiser editar o arquivo, use a opção -i
.
Eu tenho um arquivo csv que deve conter 4 colunas de dados que incluem um número de produto, um título, um URL e um preço. Cada coluna é separada por um delimitador |
(isso precisa ser mantido, há outros motivos pelos quais não posso alternar para um delimitador alternativo que não entro aqui). Como pode ser visto na entrada inferior (que é a entrada do problema neste exemplo), o título contém um canal, que quebra o padrão, o que poderia causar problemas se os dados precisarem ser importados para um banco de dados.
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
O que eu gostaria de saber é, como posso executar um comando que analise efetivamente o arquivo, e para cada linha onde há mais de 3 canais (ou seja, cada linha onde o título contém um pipe), em seguida, exclua o segundo um nessa linha. Isso efetivamente me permitiria remover o (s) cano (es) no título se houver um ou mais presentes. Eu não sei como conseguir isso.
Eu gostaria que o arquivo fosse assim depois de processado:
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