Devolver el número de línea de una subcadena coincidente en lote

Devolver el número de línea de una subcadena coincidente en lote

Quiero devolver el número de línea en un archivo que siempre tiene el mismo prefijo, pero el resto puede variar.

¿Es posible buscar un archivo utilizando únicamente componentes estándar de Windows y utilidades operativas de línea de comandos para devolver el número de línea de la parte coincidente?

Un ejemplo de la línea que estoy buscando es:

</TR></TABLE><TABLE cellspacing... Más código que puede variar.

La línea del archivo es la salida de un generador, por lo que no estoy seguro de qué ha cambiado o puede cambiar cada vez que genera el archivo.

Respuesta1

FINDSTR se utiliza para buscar texto en un archivo, imprimiendo cada línea que coincide con la búsqueda. La /Nopción hace que el número de línea se anteponga a cada línea de salida coincidente como LineNumber:FullTextOfMatchingLine.

Dado que su cadena de búsqueda incluye un espacio, debe usar la /C:"search string"opción; de lo contrario, la cadena de búsqueda se interpreta como múltiples términos de búsqueda delimitados por espacios.

Quiere que la búsqueda solo coincida con el comienzo de la línea, por lo que necesita la /Bopción. Alternativamente, puede agregar la /Ropción de tratar la búsqueda como una expresión regular y luego usar el ^ancla de principio de línea al comienzo de su cadena de búsqueda.

findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"

Solicita solo el número de línea, sin el texto de la línea coincidente. Puede utilizar FOR /F para extraer los números de línea deseados.

for /f "delims=:" %A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do @echo %A

Si coloca el comando en un archivo por lotes, deberá duplicar los porcentajes:

@echo off
for /f "delims=:" %%A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do echo %%A

Respuesta2

Úselo findstr /N strings filenamepara buscar instancias de stringsen el archivo filename.

Nota: /N"Imprime el número de línea antes de cada línea que coincida"

Para obtener más información de uso, ejecutefindstr /?

información relacionada