Powershell
Versões curtas
(Get-Content "in.txt" -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")" >> "out.txt"
Também é possível:
Set-Content "out.txt" ((Get-Content "in.txt" -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")")
- Lê
in.txt
- Grava em
out.txt
(role horizontalmente no primeiro exemplo de código para ver o final da linha)
Versões longas
$in = "in.txt";
$out = "out.txt";
(Get-Content $in -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")" >> $out
Também é possível:
Set-Content $out ((Get-Content $in -raw) -replace "\(", "'0)" -replace "\)", "(" -replace "('0\()", ")")
Explicação
Por favor, ignore as barras invertidas enigmáticas por um momento - elas são boas apenas para separar parênteses que têm um significado especial em expressões regulares.
Primeiramente, substituímos cada ocorrência de (
por NUL)
(consulte o caractere NUL ). Em seguida, substituímos cada )
por (
. Como etapa final, NUL(
é re-substituído por )
.
Usando dessa forma, garantimos que não fazemos "substituição dupla", por exemplo:
Initial string value:
(test)
After replacing "(" by ")"
)test)
After replacing ")" by "("
(test(
Aviso
O arquivo não deve conter a seqüência NUL)
. Isso levaria a interpretações erradas do meu script Powershell desde que eu usei o caractere NUL como um indicador especial (por exemplo, a mesma situação surge quando se usa telas verdes e vestindo roupas verdes).