Aquí hay un enfoque:
1. Separe el texto entre las dos palabras clave de las palabras clave mismas.
2. Obtenga las líneas que está buscando.
Aquí hay un ejemplo de cómo funcionaría en la siguiente entrada:
“Me gusta el script de shell porque es divertido”
- ¿Qué es pseudo streaming y qué sitios lo usan?
- ¿Qué tarjeta gráfica debajo de Rs 2500 es buena principalmente para juegos?
- ¿Qué habilidades necesito para hacer una IA recolectora de basura que pueda recolectarse a través de robots?
- ¿Es Londres una buena ciudad para una startup tecnológica?
- ¿Cuáles son las aplicaciones de un registro de desplazamiento?
1)
bash ~ $ echo "Me gusta el script de shell porque es divertido"> archivo bash ~ $ sed 's: \ (como \ | porque \): \ n & \ n: g' archivo> out_1 yo me gusta script de shell porque es divertido
Usé ‘:’ en el comando sed como separador. ‘s’ significa sustituto y lo que hace es sustituir “me gusta” o “porque” con “\ n & \ n”. ‘&’ es básicamente lo que encontró. “me gusta” se reemplaza por “\ nlike \ n” y “porque” se reemplaza por “\ nporque \ n”.
2)
bash ~ $ awk '/ porque / {encontrado = 0; resultado printf; result = ""} found == 1 {result = result $ 0 "\ n"}; / like / {found = 1} '<out_1 script de shell
Awk tiene el separador ‘;’ y se comporta así: awk ‘/ search1 / action1; / search2 / action2’.
En este caso, cuando se encuentra la palabra clave “me gusta”, se establece en 1, lo que significa que el texto a partir de ahora debe guardarse porque se encuentra después de un “me gusta”. Lo hace concatenando para obtener el valor de $ 0 y luego configurando el valor encontrado de nuevo a 0, lo que significa que la región entre “me gusta” y “porque” ha finalizado. La concatenación al resultado solo se realiza si encontrado se establece en 1, lo que impide escribir cualquier cosa si “porque” si se encuentra sin un “me gusta” detrás. Espero que esto tenga sentido.
Su texto puede contener caracteres de nueva línea, por lo que tiene que haber una manera de diferenciar la salida en caso de que haya dos ocurrencias del patrón que está buscando. En ‘awk’, donde el resultado se inicializa en la cadena vacía, puede reemplazarlo con un separador que desee.
Aquí hay una variante de script de shell:
#! / bin / bash si [$ 1] && [$ 2] && [$ 3] luego sed 's: \ (' $ {1} '\ |' $ {2} '\): \ n & \ n: g' $ 3 | awk '/' $ {2} '/ {encontrado = 0; resultado printf; resultado = ""} encontrado == 1 {resultado = resultado $ 0 "\ n"}; /' $ {1} '/ {encontrado = 1 } ' más echo "Parámetros no presentes" fi
Es necesario realizar algunos escapes para diferenciar entre los parámetros del script de shell y la entrada real a los comandos.
Los parámetros $ 1 y $ 2 serán las dos palabras clave y $ 3 el archivo de entrada. Es una buena idea asegurarse de que los parámetros no sean nulos antes de ejecutar el comando.
El script de shell combina los dos comandos en uno usando la tubería ‘|’ operador.
Un problema con este enfoque es que todo se mantiene entre las dos palabras clave, incluido el espacio en blanco. El resultado de este comando, por supuesto, se puede utilizar como entrada para un script diferente que elimina los espacios en blanco iniciales y finales.