1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

substituir "space" por "return" em *.txt

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por JoaoRamalho, 16 de Junho de 2008. (Respostas: 7; Visualizações: 5533)

  1. JoaoRamalho

    JoaoRamalho Power Member

    boas

    tenho aqui um txt com mto texto e queria substituir os espaços por line feeds (enters). ja tive a experiementar no vi mas n consigo pk nao sei como escrever a tecla "enter"

    algo como %s/<espaço>/<enter>/g

    cumps
     
  2. rashid

    rashid Power Member

    Tens pelo menos duas hipóteses. A primeira é procurares o carácter especifico para linguagem que queres usar ( ex. \n em c) ou usas uma tabela ascii : http://www.asciitable.com/
     
  3. Condez

    Condez [email protected] Member

    cat original_file.txt | sed 's/ /\n/g' > filtered_file.txt

    Basicamente o comando faz: 'substitui/qq_coisa/por_isto/em_todas_as_ocurrencias'

    NOTA: Existe um espaco entre os dois primeiros "/ /".
     
    Última edição: 17 de Junho de 2008
  4. slack_guy

    slack_guy Power Member

    Outra solução:
    Código:
    $ perl -p -i -e 's|\s|\n|g' teu_ficheiro.txt
    No Vim, usas:
    Código:
    :%s/\s/\r/g
     
    Última edição: 17 de Junho de 2008
  5. The_True_Eue

    The_True_Eue Power Member

    Para inserires um "Enter" ou qualquer outro caractere especial no vim (no vi não sei, mas provavelmente estás a usar o vim...) basta fazeres Ctrl+V e depois pressionas a tecla que queres.

    O comando para essa substituição seria então:

    :%s/ /^M/g

    O ^M significa Ctrl+M, que é o código do line feed (13, M é a 13ª letra do alfabeto :) ). Não são os caracteres '^' e 'M'. É apenas um caractere. Para o inserir fazes Ctrl+V e depois Enter (ou Ctrl+M, se te quiseres armar em esperto).

    Espero que não tenhas redefinido o Ctrl+V para fazer "put" (atalhos à Windows...)

    EDIT: Agora fiquei na dúvida se o line feed é o 13 ou o 10. Usa o Enter e não o Ctrl+M. É mais certo...
     
  6. [knap]

    [knap] Power Member

    Pode-se também fazer um pequenino programa em C ou Python que faça isso.

    Edit:

    Estive aqui a martelar um bocado em Python e arranjei isto, não está grande coisa mas ainda sou um bocado nabo em python.

    Código:
    def check(text):
        
        for i in range(len(text)):
    
            if text[i] == " ":
    
                text[i] = "\n"
    
        return text
    
    def toList(text):
        
        list = []
        
        for i in text:
            
            list.append(i)
    
        return list
    
    def toString(text):
    
        string = ""
    
        for i in text:
    
            string += i
    
        return string
    
    file = raw_input("Indique o nome do ficheiro:  ")
    
    f = open(file, "r")
    g = open("tmp", "w")
    
    text = f.read()
    
    g.write(toString(check(toList(text))))
    
    f.close()
    g.close()
    
    f = open(file, "w")
    g = open("tmp", "r")
    
    f.write(g.read())
    
    f.close()
    g.close()
    
    
    Cria um ficheiro auxiliar tmp que depois não é apagado.

    O que acham?
     
    Última edição: 18 de Junho de 2008
  7. Ja agora, para o pessoal que percebe de sed... não da para fazer substituições apenas na primeira palavra de cada linha? do genero sed s\substituir_isto\por_isto\$1 nome_do_ficheiro

    Será que faz algum sentido? :wscared:
     
  8. Condez

    Condez [email protected] Member


    Retira a ultima parte, o "g".
    Se nao o colocares, o sed substitui apenas a primeira ocurrencia em cada linha.

    Exemplo:
    cat original_file.txt | sed 's/substituir_isto/por_isto/' > filtered_file.txt
     

Partilhar esta Página