ignora o limite de caracteres em Sed e a substituição / caractere?

2

Estou usando o Windows XP.

Eu quero substituir uma palavra de comprimento de 200.000 caracteres e o CMD tem problemas (a linha de entrada é muito longa). Com o Linux, o terminal tem problemas de tamanho?

Se eu substituir muitas palavras por muitas outras palavras, não posso substituir um caractere por / porque o CMD gera um erro de saída.

Existe uma solução para contornar esses problemas?

    
por user143822 06.07.2012 / 05:22

2 respostas

0

Sobre sua pergunta sobre a linha de comando do terminal Linux. A resposta é: ele pode lidar com strings muito maiores, que são muito dependentes da quantidade de RAM livre que você tem. Por exemplo. Na linha de comando, corri apenas printf '%s' com uma string de 20.000.000 bytes; não teve problemas. Eu também o executei através de sed.exe (em um ambiente Linux wine ); isso funcionou bem, também ... Seja qual for o limite da linha de comando, também depende de qual programa o que você está alimentando, cadeias tão grandes podem manipular como seu tamanho máximo de entrada de comando.

Mas é uma situação incomum / estranha em que você desejaria passar strings tão grandes para um programa, porque em algum momento você atingirá o máximo.

Com sed e strings tão grandes, você pode fazer uma destas duas coisas:

  1. Grave seus dados em um arquivo e use:

    sed "s@ab/cd@AB_CD@" my_data_file

  2. pipe (|) a saída de um comando para a entrada padrão do sed:

    my_data_app | sed "s@ab/cd@AB_CD@"

Note que sed pode ter algum limite de comprimento de linha, mas da memória, o limite do GNU sed é bastante alto.

Além disso, em vez do padrão / , usei @ , mas você pode usar praticamente qualquer coisa que desejar.

    
por 06.07.2012 / 11:15
1

Estou usando o sed para windows no win7. Eu me deparei com um problema em que a cadeia de substituição era muito grande. Eu estava usando isso para substituir seções de arquivos de configuração e depois de cerca de 10.000 caracteres iria parar de funcionar e dar um erro de Não é possível encontrar o arquivo especificado.

Acabei tendo que dividir a substituição em duas operações. O primeiro preencheria 1/2 dos dados e terminaria com ### ENDOFSECTION ### e, em seguida, outro substituto substituiria o ### ENDOFSECTION ### pelo resto dos dados. Não tenho certeza se isso é apenas um limite de janelas ou não.

    
por 30.10.2014 / 17:50

Tags