Eu tenho um arquivo de texto com milhares de linhas com caracteres ASCII e não-ACII. É suposto seguir um padrão de
First line: only non-ASCII characters
Second line: only non-ASCII characters
Third line: only ASCII characters
Fourth line: mix of ASCII and non-ASCII characters
Infelizmente, a realidade é que se parece com o exemplo a seguir, onde no meio está faltando a linha que mistura caracteres ASCII e não-ASCII:
日本語のみ
日本語のみ
English words only
English and 日本語
日本語のみ
日本語のみ
English words only
日本語のみ
日本語のみ
English words only
English and 日本語
Felizmente, até onde posso dizer, é apenas a linha que mistura caracteres ASCII e não-ASCII às vezes ausentes. Significa que o que deve ser grupos de 4 linhas são, por vezes, grupos de apenas 3.
Para corrigir o arquivo, preciso:
- Pesquise todas as linhas com apenas caracteres ASCII.
- Teste a linha a seguir para ver se ela contém apenas não ASCII.
- Nesse caso, insira uma linha de espaço reservado seguindo a linha somente ASCII.
O resultado deve ser:
日本語のみ
日本語のみ
English words only
English and 日本語
日本語のみ
日本語のみ
English words only
+Aあ+
日本語のみ
日本語のみ
English words only
English and 日本語
(Eu escolhi para fazer o espaço reservado +Aあ+
para que ele esteja em conformidade com o mix de ASCII e não-ASCII como as linhas que ele está representando.)
Descobri que posso usar sed para inserir novas linhas sed -e "/ isto é texto existente / a \ 'esta é uma nova linha'" < file.text. E aprendi que posso procurar caracteres ASCII com sed usando LC_ALL=C
e [\d0-\d127]
.
No entanto, não estou claro em como separar condicionalmente a pesquisa. Quer dizer, eu poderia inserir uma linha após cada instância de caracteres ASCII, mas como eu faço uma pesquisa que insere uma linha quando uma linha ASCII é encontrada e a próxima linha é apenas não-ASCII ?
Por favor, note que eu não sou específico sobre o uso de sed. Se uma resposta puder ser fornecida usando Gedit, LibreOffice ou qualquer operação de linha de comando, isso seria ótimo.