elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr  (Leído 6,975 veces)
gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« en: 14 Abril 2016, 11:25 am »

Buenas,

Esto no es tanto de scripting pero no sabía muy bien donde encajarlo.

Estoy intentando buscar a través del comando de entrada las determinadas cadenas de palabras, e probado muchas combinaciones diferentes y nada...

Para que se entienda estes serían unos ejemplos:
Código:
<comando de entrada> | find "<Conjunto de palabras a buscar literalmente en la salida del comando>" | find "<OTRO conjunto de palabras a buscar literalmente en la salida del mismo comando>"
Otro ejemplo:
Código:
<comando de entrada> | find "<Conjunto de palabras a buscar literalmente en la salida del comando>" && "<OTRO conjunto de palabras a buscar literalmente en la salida del mismo comando>"

Pruebo lo mismo con findstr.

La cuestión de todo esto, es intentar concatenar diversos términos literales dentro del comando find o findstr (u otro si lo hubiese).

Gracias
un saludo!


En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #1 en: 15 Abril 2016, 09:10 am »

seguí probando y nada...
no entiendo que más necesita el interprete para ejecutar una sintaxis de este tipo.


En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #2 en: 15 Abril 2016, 19:59 pm »

Lo que sucede es que findstr te devuelve toda la linea, asi que lo que estas pasando entre pipes es cada vez lo mismo.

Por ejemplo, asumiendo este string original:
Código:
abcdacb

ejecutamos
Código:
FINDSTR /C:"acb"
da comoresultado
Código:
abcdacb

Asi que si luego tu querias extraer de ahi "cb", no puedes, ya que siempre te devolverá, mientras la búsqueda encuentre un resultado
Código:
abcdacb

Para lo que quieres hacer puedes usar FOR /F con tokens y delims(si los datos tienen una estructura conocida), o con substring tambien podrias (te daría algo más de juego). Lo bueno de substring es que puedes obtener nuevas Strings con los datos que tu quieres solo indicando las cadenas a conservar/eliminar.

Para cosas más complicadas te recomiendo que busques un codigo en VBS o powershell (o cualquier otro), no es que no se pueda hacer en batch pero se puede complicar mucho el codigo y creo que no vale la pena.

PD: ahora me fijo que usabas find, pero el resultado para lo que explicaba es el mismo, no se devuelve la cadena, sino toda la linea.

PD2: otra cosa que igual te sirve también es que si findstr encuentra un resultado errorlevel vale 0, entonces puedes usar algo como:
Código:
set var=cadena1
FINDSTR /C "%cadena1%" > null
IF ERRORLEVEL EQU 0 goto: cadena1Encontrada
REM Si no..
goto:eof
« Última modificación: 16 Abril 2016, 20:35 pm por Zomkar » En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #3 en: 18 Abril 2016, 01:03 am »

Gracias por la respuesta @Zomkar, pero el tema no es el resultado que me devuelve, si eso lo hace bien ya que quiero que me devuelva la línea entera de la cadena.

La cuestión de esto, es que en una sola línea quería hacer todas las búsquedas de todas las líneas que contengan determinada palábra, para eso se me ocurrió contatenar varios find o findstr (me daría lo mismo para este caso) con un pipe (|) de modo que en cada find ir incluyendo la palabra que estará en la línea a mostrar.

La cuestión es cómo enlazar varios comandos find o findstr en una sola líniea o sentencia para encontrar palabras de diferentes líneas.
En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #4 en: 18 Abril 2016, 02:34 am »

De nada! A mi me funciona así:

Código:
C:\Users\>echo aaaa | findstr /C:"a" | findstr /C:"a"
aaaa

C:\Users\>echo aaaa | findstr /C:"a" | findstr /C:"b"

C:\Users\>

Creo que tu quieres buscar las lineas que contengan "abc" y además que contengan "xyz", es asi? Y que si lo encuentran las muestre. Para eso sirve con este ejemplo.
Si es otra cosa a ver si puedes explicar mejor.
En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #5 en: 18 Abril 2016, 12:20 pm »

En el segundo ejemplo que pusiste, se ve como buscando "a" y "b" no devuleve nada pese a que "a"
 si que existe y aunque "b" no.

Código:
C:\Users\>echo aaaa | findstr /C:"a" | findstr /C:"b"

C:\Users\>

Yo quiero hacer algo similar a eso, pero que si que me lo muestre. Imaginemos que es lo siguiente:

Hago un dir en mi directorio y me muestra los siguiente:

Código:
C:\Users\gregor>dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: A881-83A4

 Directorio de C:\Users\gregor

11/04/2016  00:05    <DIR>          .
11/04/2016  00:05    <DIR>          ..
13/04/2016  11:18    <DIR>          .oracle_jre_usage
15/04/2016  20:08    <DIR>          .VirtualBox
15/10/2015  01:10    <DIR>          .zenmap
07/03/2016  10:17    <DIR>          Contacts
18/04/2016  09:32    <DIR>          Desktop
13/04/2016  20:58    <DIR>          Documents
13/04/2016  12:05    <DIR>          Downloads
18/04/2016  08:35    <DIR>          Dropbox
07/03/2016  10:17    <DIR>          Favorites
07/03/2016  10:17    <DIR>          Links
17/02/2016  15:44    <DIR>          MindTerm
07/03/2016  10:17    <DIR>          Music
25/01/2016  00:38    <DIR>          OneDrive
11/04/2016  18:28    <DIR>          Pictures
07/03/2016  10:17    <DIR>          Saved Games
07/03/2016  10:17    <DIR>          Searches
11/04/2016  00:05                70 sha1sum.txt
11/04/2016  18:28    <DIR>          Videos
               1 archivos             70 bytes
              19 dirs  286.476.800.000 bytes libres


Ahora quiero solo coger tres líneas que contengan determinadas palabras, por ejemplo, desktop, Favorites y Music.
Al introducir el comando y contatenar el findstr con un pipe (|), este como restultado no me muestra nada.

Código:
C:\Users\gregor>dir | findstr /C:"Desktop" | findstr /C:"Favorites" | findstr /C:"Music"

C:\Users\gregor>

Lo que quiero conseguir es que haciendo lo anterior, con la sintaxis correcta, me muestre esto (este resultado lo puse a mano para intentar reflejar el resultado de lo que busco):

Código:
C:\Users\gregor>dir | findstr /C:"Desktop" | findstr /C:"Favorites" | findstr /C:"Music"
18/04/2016  09:32    <DIR>          Desktop
07/03/2016  10:17    <DIR>          Favorites
07/03/2016  10:17    <DIR>          Music

Espero que con esto me explicara claramente ahora :D
En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #6 en: 18 Abril 2016, 22:44 pm »

Vale, ahora si te entiendo.

A ver, lo primero, porque falla?

Las pipes (|) redirigen la salida de un comando al input de otro.
En la practica esto hace que:
Código:
dir | findstr /C:"Desktop" | findstr /C:"Favorites" 
Significa que el findstr "Desktop" buscará en toda la salida de dir, que ya pusiste, y mostraría
Código:
18/04/2016  09:32    <DIR>          Desktop
Pero, como estamos redirigiendo el output, no muestra nada, se lo pasa como input al siguiente comando, findstr /C:"Favorites". Éste al ejecutarse, tiene como input la linea de Desktop, y no todo el comando Dir original. Como en esa linea no hay "Favorites" no muestra nada.
Espero que se entienda.

Ahora vamos a como hacer lo que quieres:
Código:
dir | findstr "Desktop Favorites Music"
Quitando la opción /C, es cuestion de pasar todas las cadenas de texto que se quieran encontrar entre comillas, separadas de un espacio.
En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #7 en: 19 Abril 2016, 00:51 am »

Ok, probado y me sirve, exactamente era eso! más fácil de lo que pensaba... y yo intentando concatenar de mil formas posibles... :/ jaja

Gracias zomkar!
En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #8 en: 19 Abril 2016, 01:53 am »

De nada, me alegro que te sirva :)
En línea

andres3626

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
« Respuesta #9 en: 26 Noviembre 2019, 19:50 pm »

Buenas tardes. Su ayuda por favor.
Tengo un archivo que tiene la siguiente linea 192.168.1.1
y deseo que el batch haga lo siguiente
Si encuentra 192.168.1.1
    escribir en archivo 192.168.1.2
    escribir en archivo 192.168.1.3
Si no encuentra 192.168.1.1
    escribir en archivo 192.168.1.1
    escribir en archivo 192.168.1.2
    escribir en archivo 192.168.1.3

tengo algo como esto
FINDSTR /I "192.168.1.1" %windir%\system32\drivers\etc\hosts.* | FINDSTR /I "192.168.1.2" %windir%\system32\drivers\etc\hosts.*

Pero no me funciona. Alguien con alguna idea de como puede ser el batch?
Muchas gracias...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito una DB en SQL de un diccionario o conjunto de palabras
Foro Libre
H4RR13R 0 2,091 Último mensaje 1 Julio 2010, 00:54 am
por H4RR13R
Busqueda binaria con palabras
Programación C/C++
soez 0 3,172 Último mensaje 3 Agosto 2010, 04:10 am
por soez
PROBLEMA PARA CONCATENAR C#
.NET (C#, VB.NET, ASP)
SAGA-gl 5 4,295 Último mensaje 6 Abril 2014, 20:02 pm
por El Benjo
Código que me pemita saber cuantas palabras empiezan y acaban con la misma letra « 1 2 »
Programación C/C++
divax 11 14,986 Último mensaje 22 Marzo 2015, 13:48 pm
por ivancea96
busqueda de palabras en un fichero
Programación C/C++
johnnyd77 3 4,088 Último mensaje 30 Junio 2016, 18:36 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines