Como procurar e substituir arquivos de texto com “/”

0

Eu tenho um arquivo de texto com ./. e preciso substituí-lo por 0|0 .

O arquivo é muito grande para ser aberto no Gedit e feito manualmente.

Posso fazer isso usando sed ?

    
por Renata Carmona E Ferreira 09.11.2017 / 14:33

3 respostas

6

Sim. Nesse caso, é útil escolher um delimitador diferente como _ , assim você não precisa escapar da barra:

sed 's_\./\._0|0_'

Exemplo:

$ cat test
./.
$ sed 's_\./\._0|0_' test
0|0

Adicionar

  • -i para alterar o arquivo em vez de imprimir a saída para stdout,
  • -i.b para fazer isso e salve um backup com .b como extensão e
  • g para o final da expressão para alterar várias ocorrências por linha, em vez de apenas a primeira (→ 's_\./\._0|0_g' ).

Explicações

  • s/A/B/ - substitua A por B , o mesmo que s_A_B_ , ssAsBs ou o que você imaginar:

    % bl0ck_qu0te%
  • s/A/B/g - substitua A por B e faça g lobally, então não pare de fazer isso após a primeira descoberta (por linha!)

  • \./\. - a string literal ./. , um ponto precisa ser escapado com uma barra invertida porque eles fazem parte de expressões regulares básicas e outra pessoa pegaria qualquer caractere, correspondendo a/a , a/b , /// e assim por diante
  • 0|0 - a string literal 0|0
por dessert 09.11.2017 / 14:37
4

Sim, você pode fazer isso com sed.
Você precisa escapar de . e / com \ .

sed -i.bak 's/\.\/\./0|0/g' file

-i.bak fará o sed editar o arquivo, mas criará um arquivo de backup com a extensão .bak.
O g no final significa "global" - > Substitui todas as ocorrências.

    
por RoVo 09.11.2017 / 14:36
1

Mesmo que você tenha solicitado o comando sed para atender ao seu requisito, você também pode tentar usar o comando ex .

ex -sc '%s/\.\/\./0|0/g|x' file

% seleciona todas as linhas

s para substituto

g substitua todas as instâncias globalmente

x escrever se as alterações forem feitas e sair

Exemplo: -

$cp file file.bak
$cat file
./.
$ex -sc '%s/\.\/\./0|0/g|x' file
$cat file
0|0
    
por Rooney 12.11.2017 / 14:32