regex - online - grep wildcard string
¿Cómo devuelvo solo la expresión regular coincidente cuando selecciono string(grep) en PowerShell? (6)
David está en el camino correcto. [regex] es un acelerador de tipo para System.Text.RegularExpressions.Regex
[regex]$regex = ''.-.-.''
$regex.Matches(''abc 1-2-3 abc'') | foreach-object {$_.Value}
$regex.Matches(''abc 1-2-3 abc 4-5-6'') | foreach-object {$_.Value}
Podría envolver eso en una función si eso es demasiado detallado.
Estoy tratando de encontrar un patrón en los archivos. Cuando obtengo una coincidencia usando Select-String
no quiero toda la línea, solo quiero la parte que coincida.
¿Hay algún parámetro que pueda usar para hacer esto?
Por ejemplo:
Si lo hice
select-string .-.-.
y el archivo contenía una línea con:
abc 1-2-3 abc
Me gustaría obtener un resultado de solo 1-2-3 en lugar de devolver la línea completa.
Me gustaría saber el equivalente de Powershell de un grep -o
En el espíritu de enseñar a un hombre a pescar ...
Lo que quiere hacer es canalizar la salida de su comando de selección de cadena en miembro de Get , para que pueda ver qué propiedades tienen los objetos. Una vez que hagas eso, verás "Coincidencias" y puedes seleccionar eso simplemente conectando tu salida a | **Select-Object** Matches
| **Select-Object** Matches
.
Mi sugerencia es usar algo como: seleccionar linenumber, filename, matches
Por ejemplo: en la muestra de stej:
sls ./test.txt -patt ''test/d'' -All |select lineNumber,fileName,matches |ft -auto
LineNumber Filename Matches
---------- -------- -------
1 test.txt {test1, test2, test3}
2 test.txt {test3, test4}
3 test.txt {test2}
Intenté otro enfoque: Select-String devuelve los Partidos de propiedad que se pueden usar. Para obtener todas las coincidencias, debe especificar -AllMatches. De lo contrario, solo devuelve el primero.
El contenido de mi archivo de prueba:
test test1 alk atest2 asdflkj alj test3 test
test test3 test4
test2
La secuencia de comandos:
select-string -Path c:/temp/select-string1.txt -Pattern ''test/d'' -AllMatches | % { $_.Matches } | % { $_.Value }
devoluciones
test1 #from line 1
test2 #from line 1
test3 #from line 1
test3 #from line 2
test4 #from line 2
test2 #from line 3
Ninguna de las respuestas anteriores funcionó para mí. El de abajo lo hizo.
Get-Content -Path $pathToFile | Select-String -Pattern "''test/d''" | foreach {$_.Matches.Value}
Get-Content -Path $ pathToFile | # Get-Content se dividirá en líneas individuales para nosotros
Select-String -Pattern "''test / d''" | # Definir la expresión regular
foreach {$ _. Matches.Value} # solo devuelve el valor del campo Objetos coincidentes. (Esto permite múltiples coincidencias de resultados).
O solo:
Select-String .-.-. ./test.txt -All | Select Matches
Puede usar el espacio de nombres System.Text.RegularExpressions:
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx