Procurando por strings literal com uma expressão regular, quando a string de pesquisa contém caracteres especiais, às vezes não é tão simples quanto procurar padrões, mas você pode fazer isso com um pouco de malabarismo.
Observação: o comando echo
deve atender caracteres especiais do CMD, portanto, ele precisa de ^^
para escapar de um único ^
e ^|
para escapar de |
... Você não precisa do CMD caractere de escape ^
se você digitar diretamente no arquivo.
Passo 1: Crie um arquivo chamado literal-srch-strings.txt , que contém a string exata (inalterada) a ser substituída. Existem duas maneiras de criar este arquivo:
-
Como um comando emitido na
linha de comando do CMD , ou como um comando em um script de comando .cmd / .bat . echo sed -i^^/\*$/$[{" ;"> literal-srch-strings.txt
-
Crie literal-srch-strings.txt você mesmo, no seu editor de texto.
Nesse caso, você não deve usar o caractere de escape CMD^
, portanto, a linha tem apenas um^
, não^^
- isso porque você está ignorando o CMD -shell.
Aqui está o que é necessário no arquivo .txt (assim como o nome do arquivo diz :)sed -i^/\*$/$[{" ;"
Passo 2: Crie um script sed , chamado str-to-regex.sed , para converter a (s) string (s) em sed regex (s)
Observe que o mesmo problema do caractere de escape CMD ^
se aplica a essa etapa, então, novamente, há duas maneiras de criar o arquivo .sed:
-
Como um comando:
echo s/[]\/$*.^^^|[]/\^&/g; s/.*/s\/^&\/Ciao!\/g/> str-to-regex.sed
-
Usando seu editor de texto, crie um arquivo chamado str-to-regex.sed , contendo:
s/[]\/$*.^|[]/\&/g; s/.*/s\/&\/Ciao!\/g/
Etapa 3: Execute o sed-script que converte a string em uma expressão regeular sed e envie sua saída para outro script sed, replace-text.sed , que fará a substituição real.
sed -f str-to-regex.sed literal-srch-strings.txt > replace-text.sed
Passo 4: Executar replace-text.sed - Para o teste, podemos usar literal-srch-strings.txt como o arquivo de entrada, mas você pode, obviamente, usar qualquer arquivo de entrada.
sed -f replace-text.sed literal-srch-strings.txt
Aqui está a saída:
Ciao!