Removendo o primeiro espaço em uma linha

6

Como posso remover apenas o primeiro espaço de uma linha como a abaixo sem remover os outros espaços na mesma linha?

Exemplo de entrada:

2015-04-18 10:21:59 10 05430 -9999 -9999 000000000000

Exemplo de saída:

2015-04-1810:21:59 10 05430 -9999 -9999 000000000000
    
por ThehalfarisedPheonix 22.01.2017 / 10:25

5 respostas

2

Usando awk :

> awk '{print $1$2,$3,$4,$5,$6,$7}' yourfile > outputfile

A saída:

> cat outputfile

2015-04-1810:21:59 10 05430 -9999 -9999 000000000000

Você pode remover qualquer espaço na linha e manter qualquer um

Assumindo : o arquivo de entrada deve conter:

  1. sem espaço em branco principal
  2. sem espaços consecutivos
  3. sem guias
  4. menos de sete espaços no total

Se qualquer uma dessas suposições for violada, o resultado não será correto

    
por 22.01.2017 / 10:31
18

Você pode usar sed para isso:

sed 's/ //' infile >outfile

Isso aplica uma substituição a todas as linhas do arquivo infile que substituirá o primeiro caractere de espaço por nada (ou seja, removê-lo). A saída é armazenada no arquivo outfile . Com sed 's/ //N' , onde N é um número inteiro entre 1 e 9, você pode escolher o espaço a ser removido.

Se a linha estiver em uma variável shell, você poderia usar

var="${var/ /}"

Isso usa a expansão do parâmetro ${parameter/pattern/string} em bash para fazer a mesma coisa que o comando sed , mas no valor em $var . A string resultante é, nesse exemplo, armazenada novamente em $var .

    
por 22.01.2017 / 10:32
1

Você pode usar o Vim no modo Ex:

ex -sc '%s/ //|x' file
  1. % seleciona todas as linhas

  2. s substituto

  3. x salvar e fechar

por 22.01.2017 / 15:29
0

Pequeno e simples perl one-liner:

$ perl -ane 'printf "%s",@F[0];@F[0]="";print @F'  <<< "2015-04-18 10:21:59 10 05430 -9999 -9999 000000000000"                        
2015-04-1810:21:591005430-9999-9999000000000000

Ou ainda mais simples, como sugerido por mik nos comentários:

perl -pe 's/ //' <<< "2015-04-18 10:21:59 10 05430 -9999 -9999 000000000000"

O Python também pode fazer isso. Aqui está um pequeno script que faz o trabalho. Pode ser reduzido a um one-liner, se necessário:

#!/usr/bin/env python
from __future__ import print_function
import sys
for line in sys.stdin:
    words=line.strip().split()
    print(words[0],end="")
    print(" ".join(words[1:]))

E com a mesma linha no arquivo de entrada duplicada 3 vezes, aqui está um teste para entrada de várias linhas:

$ ./remove_leading_space.py < input.txt                                                                                               
2015-04-1810:21:59 10 05430 -9999 -9999 000000000000
2015-04-1810:21:59 10 05430 -9999 -9999 000000000000
2015-04-1810:21:59 10 05430 -9999 -9999 000000000000

Se você tiver apenas uma linha editada, poderá fazer assim:

$ ./remove_leading_space.py <<< "2015-04-18 10:21:59 10 05430 -9999 -9999 000000000000"                                               
    
por 22.01.2017 / 22:15
-1

É uma pergunta bem simples.

sed -i 's/ //' /path/to/file

Experimente este comando e não adicione s no final da expressão sed.

Ele apenas removerá o primeiro espaço de cada linha.

    
por 22.01.2017 / 22:23