Questão Oneliner para multiline regex s /, \ n] /] / g?


Alguém pode fornecer um simples one-liner para remover certas quebras de linha?

Dentro vim eu uso %s/,\n]/]/g

Isso deve ser possível com um IMHO de uma linha muito simples, mas como?


0


origem


Primeiro, remova as linhas novas e use sed. tr -d '\ r \ n' | sed -e "s /, \ n] /] / g" Mas agora tudo está em uma linha longa? - Bastl
"Certos linebreaks"? Quais? - m0skit0
aqueles que ocorrem no padrão, ou seja, cercados por e] - Bastl
Eu posso postar uma resposta usando Perl se você estiver interessado. - m0skit0
sim, pls, tudo é apreciado, embora o perl não seja de todo o meu favorito ... :-) - Bastl


Respostas:


Isso deve funcionar:

perl -e "$_ = join('', <>); s/,\n]/,]/g; print;" < input_file > output_file

1



aii, esse é um longo one-liner, o comando vim é tão simples ... - Bastl
Quem se importa? Funciona ... O problema, na verdade, é a entrada do arquivo (<>). Eu tenho que converter a matriz resultante ler do arquivo para uma única linha para processar ($ _ = join ('', <>);) porque o arquivo é dividido precisamente por "\ n". Se alguém souber como ler um arquivo em um único escalar, eu ficaria feliz em modificá-lo em algo mais curto. - m0skit0
*** Se alguém souber como ler um arquivo em um único escalar local $ / = undef; $ string = <FILE>; - Yordan Georgiev
Eu aprendi enquanto isso, mas obrigado mesmo assim :) - m0skit0


Isso pode funcionar para você:

sed ':a;$!{N;ba};s/,\n]/]/g' file

ou isto:

sed 'N;s/,\n]/]/;P;D' file

1





substituição multilinha para todos os arquivos * .c

perl -p -i.bak -e 's#to_find\n\n#to_replace#g' *.c


0