--deleted previous text - ¡Hice la pregunta incorrecta!powershell: eliminar el texto del final de la cadena
ejem ....
Lo que tengo es $var = "\\unknowntext1\alwaysSame\unknowntext2"
tengo que mantener sólo "\\unknowntext1"
--deleted previous text - ¡Hice la pregunta incorrecta!powershell: eliminar el texto del final de la cadena
ejem ....
Lo que tengo es $var = "\\unknowntext1\alwaysSame\unknowntext2"
tengo que mantener sólo "\\unknowntext1"
Trate expresiones regulares:
$foo = 'something_of_unknown' -replace 'something.*','something'
O si usted sabe sólo parcialmente la 'algo', por ejemplo,
'something_of_unknown' -replace '(some[^_]*).*','$1'
'some_of_unknown' -replace '(some[^_]*).*','$1'
'somewhatever_of_unknown' -replace '(some[^_]*).*','$1'
El $1
es referencia a grupo en paréntesis (la parte (some[^_]*)
).
Editar (después cambiada pregunta):
Si utiliza expresiones regulares, a continuación, tienen que ser escapado caracteres especiales:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '\\\\unknowntext1.*', '\\unknowntext1'
o (otra magia de expresiones regulares) utiliza de búsqueda hacia atrás como esto:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', ''
(que es: tomar cualquier cosa (.*
), pero debe haber \\unknowntext1
antes ('(?<=\\\\unknowntext1)
) y reemplazarlo por una cadena vacía.
Editar (última)
Si sabe que hay algo que se conoce en el medio (la alwaysSame
), esto podría ayudar:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1'
function Remove-TextAfter {
param (
[Parameter(Mandatory=$true)]
$string,
[Parameter(Mandatory=$true)]
$value,
[Switch]$Insensitive
)
$comparison = [System.StringComparison]"Ordinal"
if($Insensitive) {
$comparison = [System.StringComparison]"OrdinalIgnoreCase"
}
$position = $string.IndexOf($value, $comparison)
if($position -ge 0) {
$string.Substring(0, $position + $value.Length)
}
}
Remove-TextAfter "something_of_unknown" "SoMeThInG" -Insensitive
Gracias por el formato 'System.StringComparison'. ; ^) – ruffin
Lo que tengo es $ var = "\ unknowntext1 \ alwaysSame \ unknowntext2"
Necesito conservar solo "\ unknowntext1 "
No estoy seguro de que esto requiera una expresión regular. Suponiendo alwaysSame
es, literalmente, siempre la misma, ya que la discusión en torno a la respuesta de Stej sugiere, parece, con mucho, la forma más sencilla de lograr esto sería:
$var.substring(0, $var.indexOf("\alwaysSame"));
¿Cómo no responde eso la pregunta? Si tiene '$ var =" \\ unknowntext1 \ alwaysSame \ unknowntext2 "' y ejecuta '$ var.substring (0, $ var.indexOf (" \ alwaysSame "));', obtiene '\\ unknowntext1', * QED *. Estaba sorprendido de que las otras respuestas no fueran trivialmente más intrincadas. – ruffin
Noto que ninguno de ustedes (Hashem y Lucas) tiene una etiqueta 'powershell' en su perfil. Las líneas de código de Powershell siempre * emiten sus resultados a la "tubería", si eso te está lanzando.Esa declaración en mi respuesta "devolverá" el valor solicitado por el OP; cada línea de código de PowerShell es una especie de función implícita que puede encadenarse a otro comando posterior. Puedo ver cómo eso podría haberte confundido. También edité la respuesta para que mi intención sea más clara para los usuarios que no son de PS. – ruffin
por favor me Downvote, soy muy malo. – AshClarke
Edité la respuesta, pero como ahora veo, tengo que editarla una vez más;) – stej