Estou usando um comando do Powershell em um arquivo de lote do Windows para procurar uma string de texto como esta: foo=1
(onde 1
poderia haver qualquer coisa)
Eu sei que .*?
funciona como um curinga no Powershell. O trecho abaixo não é o comando completo, coloquei apenas a parte relevante.
Estou tentando substituir toda a linha foo=1
por nada, usando o curinga do Powershell .*?
para o 1
seguinte:
-replace 'foo=.*?', ''
O problema é que, em vez de ficar com uma linha em branco, ainda fico com o final=1
Não sei por que o curinga não está sendo substituído por nada conforme o comando na caixa de código acima.
Agradeço antecipadamente a qualquer resposta que lance alguma luz sobre isso.
.?*
não é "um curinga" no PowerShell .O
-Replace
operador no PowerShell não usa correspondência de curingas, ele usa expressões regulares.Em expressões regulares,
.
corresponderá a qualquer caractere único , exceto uma quebra de linha.?
e*
, bem como quantificadores+
usados em conjunto com ou outros caracteres correspondentes mais específicos. De modo a:.
'.?'
corresponde a nenhum ou um caractere'.*'
corresponde a zero ou mais caracteres'.+'
corresponde a um ou mais caracteresOs curingas no PowerShell são usados pelos operadores
-Like
e-notLIke
, além de serem usados para especificar facilmente vários caminhos. Além do*
e?
familiar para a maioria, colchetes ([
&]
) podem ser usados para definir um intervalo de caracteres ou enumeração. É por isso que os caminhos com caracteres de colchetes no nome exigem o uso do-LiteralPath
parâmetro.Então, para sua pergunta/exemplo, você precisa de uma expressão regular simples. Mas "
1
pode ser qualquer coisa" deixa várias opções:-replace 'foo=.'
-replace 'foo=.+$'
-replace 'foo=.+\ ' # space
-replace 'foo=.+,' # comma
Continuei mexendo e resolvi:
Adicionar o extra
.*
após o curinga original fez com que funcionasse.OK, agora tenho horas e horas de trabalho para fazer ;)