Aparar o início de um arquivo de texto

2

Eu tenho um arquivo de texto com espaços inesperados no começo e gostaria de cortar o início e salvá-lo. Como posso fazer isso?

Eu tentei um exemplo muito simples que encontrei na internet, mas apaga o arquivo:

cat /etc/nginx/sites-enabled/default| sed -e 's/^[ \t]*//' > /etc/nginx/sites-enabled/default
    
por ArkadyB 18.02.2016 / 09:34

4 respostas

1

Isto:

cat /etc/nginx/sites-enabled/default| sed -e 's/^[ \t]*//' > /etc/nginx/sites-enabled/default

trunca o arquivo porque o redirecionamento > é resolvido primeiro; Ou seja, o arquivo é truncado antes que cat e sed sejam executados (e cat leia um arquivo vazio).

Além disso, o comando retira os espaços iniciais e as tabulações .

Se é isso que você quer, basta usar a opção no lugar de sed (e descartar o cat inútil):

sed -ie 's/^[ \t]*//' /etc/nginx/sites-enabled/default

Se você deseja remover somente os espaços iniciais, use este comando:

sed -ie 's/^ *//' /etc/nginx/sites-enabled/default

Além disso, parece que você deseja processar apenas a primeira linha.

Se for esse o caso, anexe um 1 ao comando s ; ou seja:

sed -ie '1s/^[ \t]*//' /etc/nginx/sites-enabled/default

para remover espaços e tabulações iniciais da primeira linha e

sed -ie '1s/^ *//' /etc/nginx/sites-enabled/default

para remover apenas os espaços iniciais da primeira linha.

    
por kos 18.02.2016 / 09:57
0

Use isso:

cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 2.txt

Explicação

  1. cat 1.txt - carrega o conteúdo do arquivo como entrada
  2. sed 's/^ *//;s/ *$//' - remove espaços vazios de ambos os lados do arquivo. Começando ou perdendo.
  3. sed '/^$/d' - remove linhas vazias (no caso deixado pelo comando acima)
  4. > 2.txt - salva o resultado em um novo arquivo.

Caso você não queira remover as linhas vazias, pule a etapa três. Nesse caso, seu comando se torna:

cat 1.txt | sed 's/^ *//;s/ *$//' > 2.txt

Exemplo

Inserir texto (como imagem, pontos mostram espaços):

Texto de saída (como imagem, sem pontos e linhas vazias removidas):

EDITAR

A explicação acima esvazia um arquivo se redirecionado para si mesmo, conforme mostrado abaixo:

cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 1.txt

Para lidar com isso e garantir que o conteúdo seja reescrito no arquivo, basta fazer o eco da saída como no comando abaixo:

echo | cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 1.txt
    
por Parto 18.02.2016 / 09:47
0

Você também pode usar o Python (Python 2 ou Python 3) para o trabalho:

python -c 'import sys; print("".join((str(line).lstrip(" ") for line in sys.stdin)))' <INPUTFILE >OUTPUTFILE

O que este comando faz:

  • python -c '...' ou python3 -c '...' :
    Inicie o interpretador Python (2 ou 3) e deixe-o executar os comandos entre aspas.
  • import sys; print("".join((str(line).lstrip(" ") for line in sys.stdin))) :
    Este é um pequeno script Python compactado em uma única linha que lê tudo do STDIN (fluxo de entrada padrão) e o imprime de volta ao STDOUT (fluxo de saída padrão) depois de ter removido todos os caracteres de espaço em branco (incluindo espaços, tabulações, etc.) de cada linha. Ele continuará lendo até que o fluxo termine, ou seja, até que você digite manualmente Ctrl + D se STDIN estiver conectado ao teclado, ou até que todos os dados tenham passado se STDIN está conectado a um arquivo ou pipe.
  • <INPUTFILE :
    Isso conecta o arquivo INPUTFILE (substitua pelo nome de arquivo apropriado) pelo comando STDIN. Se você omitir isso, o comando irá ler a entrada do teclado.
  • >OUTPUTFILE :
    Isso conecta o arquivo OUTPUTFILE (substitua pelo nome do arquivo apropriado) pelo STDOUT do comando. Se você omitir isso, o comando imprimirá sua saída no terminal.

Observe que INPUTFILE e OUTPUTFILE podem não ser os mesmos arquivos, pois o redirecionamento de saída Bash usado é resolvido primeiro e sobrescreve o arquivo antes que o script leia a partir dele.

    
por Byte Commander 18.02.2016 / 11:38
0

Você pode usar o Vim no modo Ex:

ex -sc '%s/^[ \t]*//|x' /etc/nginx/sites-enabled/default
  1. % seleciona todas as linhas

  2. s substituto

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 21:47