expresiones - powershell replace string in file
¿Cómo hago un reemplazo de cadena en una función de PowerShell? (4)
¿Cómo convierto los parámetros de entrada de función al tipo correcto?
Quiero devolver una cadena que tiene eliminada parte de la URL pasada.
Esto funciona, pero usa una cadena codificada:
function CleanUrl($input)
{
$x = "http://google.com".Replace("http://", "")
return $x
}
$SiteName = CleanUrl($HostHeader)
echo $SiteName
Esto falla:
function CleanUrl($input)
{
$x = $input.Replace("http://", "")
return $x
}
Method invocation failed because [System.Array+SZArrayEnumerator] doesn''t contain a method named ''Replace''.
At M:/PowerShell/test.ps1:13 char:21
+ $x = $input.Replace( <<<< "http://", "")
Esto funcionó para mí:
function CleanUrl($input)
{
return $input.Replace("http://", "")
}
function CleanUrl([string] $url)
{
return $url.Replace("http://", "")
}
La respuesta de Steve funciona. El problema con su intento de reproducir el script de ESV es que está usando $input
, que es una variable reservada (recopila automáticamente múltiples entradas canalizadas en una sola variable).
Sin embargo, debe usar .Replace () a menos que necesite las características adicionales de -replace (maneja expresiones regulares, etc.).
function CleanUrl([string]$url)
{
$url.Replace("http://","")
}
Eso funcionará, pero también lo haría:
function CleanUrl([string]$url)
{
$url -replace "http://",""
}
Además, cuando invoque una función de PowerShell, no use paréntesis:
$HostHeader = "http://google.com"
$SiteName = CleanUrl $HostHeader
Write-Host $SiteName
Espero que ayude. Por cierto, para demostrar $ input:
function CleanUrls
{
$input -replace "http://",""
}
# Notice these are arrays ...
$HostHeaders = @("http://google.com","http://.com")
$SiteNames = $HostHeader | CleanUrls
Write-Output $SiteNames
El concepto aquí es correcto.
El problema es con el nombre de la variable que ha elegido. $ input es una variable reservada utilizada por PowerShell para representar una matriz de entrada de canalización. Si cambias tu nombre de variable, no deberías tener ningún problema.
PowerShell tiene un operador de reemplazo , por lo que puede convertir su función en
function CleanUrl($url)
{
return $url -replace ''http://''
}