Eu tenho alguns arquivos de texto que contêm algumas colunas separadas por vários espaços, mas, em vez disso, preciso de uma única guia como separador. É possível fazer no Bash?
linux
bash
text-manipulation
Usuário desconhecido
fonte
fonte
Respostas:
Para converter seqüências de mais de um espaço em uma guia, mas deixe espaços individuais em paz :
Para fazer isso em vários arquivos:
ou
ou
fonte
sed: -e expression #1, char 1: unknown command: `.'
find
um na parte inferior.sed
não gosta de ter espaço antes da extensão do backup. Eu editei minha resposta. Obrigado pelo relatório.Se seu personagem possui várias guias, você também pode usar
tr -s
:Por exemplo:
Todos os espaços em branco se tornarão um.
fonte
Você pode usar
sed
para substituir vários espaços por uma guia:Exemplo para substituir um ou mais espaços por uma guia:
fonte
A resposta mais fácil usando apenas
bash
é:Se houver um número variável de colunas, você poderá fazer isso, mas ele funcionará apenas
bash
, nãosh
:por exemplo
produz:
(existe uma guia entre cada uma, mas é difícil ver quando colo aqui)
Você também pode fazer isso usando
sed
ortr
, mas observe que o manuseio de espaços em branco no início produz resultados diferentes.sed:
tr:
fonte
perl -p -i -e 's/\s+/\t/g' *.txt
fonte
Experimente o seguinte script SED:
Onde <TAB> está pressionando a tecla TAB.
fonte
Esta é uma solução muito simples:
O sed funciona basicamente dessa maneira (sed 's / old_pattern / new_pattern / g'). Nesse caso, o padrão antigo é "\ s +", o que significa encontrar espaço "s" uma ou mais vezes "+" e a barra invertida "\" para interpretar isso como expressão regular.
O novo padrão é a guia "\ t", escrita em formato de expressão regular, e o "g" aplica a substituição a todas as linhas "globalmente".
fonte