Eu tenho muitos arquivos com abas espalhadas por toda parte e gostaria de convertê-los em espaços. Eu sei sobre o expand
comando, mas infelizmente eu teria que digitar cada arquivo usando-o. Existe alguma maneira mais fácil de fazer isso no Linux?
linux
text-editing
pessoa
fonte
fonte
expand
, presumo que ele deseja que o alinhamento do texto seja preservado.'s/\t/ /g'
substituir mais do que apenas uma guia por linha.find ./ -type f -exec sed -i ’s/\t/ /g’ {} +
" (ou seja, "+
" em vez de "\;
")), se afind
versão suportar (e eu não conheci pessoalmente nenhuma versão que não suporta, mas não é um padrão POSIX , então acho que isso pode acontecer em alguns sistemas. "-exec command {} +
" Consulte o manual). Em vez de iniciar uma instância desed
para cada arquivo, isso criará uma lista de argumentos com o mesmo número de argumentos de nome de arquivo que o sistema suporta (getconf ARG_MAX
= 2097152 no meu sistema), assim comoxargs
e, portanto, iniciará muito menossed
processos.sed
não entende a\t
sequência de escape da guia. Você pode substituí-lo por um caractere de tabulação literal, no qual você pode inserir no shell[Ctrl]+V, [Tab]
.expand
é provavelmente melhor do quesed
para isso, como explicado em: stackoverflow.com/a/11094620/131824Existem várias maneiras de fazer isso. Também existem várias maneiras de dar um tiro no pé enquanto faz isso se você não for cuidadoso ou se for novo no Linux como parece. Supondo que você possa criar uma lista de arquivos que deseja converter, usando algo parecido
find
ou manualmente com um editor, basta canalizar essa lista para o seguinte.Uma maneira de dar um tiro no pé com isso é digitar um erro de digitação, criando um arquivo vazio para todos os nomes de arquivo especificados, excluindo assim o conteúdo de todos os seus arquivos. Portanto, tenha cuidado e teste o que você faz primeiro em um pequeno conjunto de arquivos dos quais você fez backup.
fonte
mv
condicional no sucesso deexpand
:expand ... && mv ...
expand -t 4
de expandir as guias para 4 espaços. Além disso, esse método pode criar novas linhas à direita. Mas, caso contrário, funciona.-I foo
cria uma variável de modelo foo para cada linha de entrada, para que você possa consultar a entrada mais de uma vez.-print0
e-0
diga aos dois comandos para usar \ 0 como um separador de linhas em vez de ESPAÇO, para que esse comando funcione para caminhos com espaços.fonte
Contras:
arquivos maiores que o tamanho do buffer do canal ( 64 KB ) são truncados
Prós:
nenhum arquivo temporário
maior que o tamanho do buffer do pipe é truncado
fonte
Isto é melhor:
fonte
/tmp/e
porque se algo mais estiver usando esse arquivo, isso vai atrapalhar. Como se dois usuários quisessem usar isso ao mesmo tempo.Dei uma chance a este problema com os seguintes requisitos em mente:
O último requisito foi o mais difícil de cumprir porque "expandir" não permite modificar os arquivos no local.
Eu vim com a seguinte solução:
Aqui está uma explicação:
fonte