Digamos que tengo una variable
line="This is where we select from a table."
ahora quiero grep cuántas veces se produce select en la oración.
grep -ci "select" $line
Lo intenté, pero no funcionó. También intenté
grep -ci "select" "$line"
Aún no funciona. Obtuve el siguiente error.
grep: This is where we select from a table.: No such file or directory

...<<<"$line". El comandogrepestá esperando un archivo en su lugarRespuestas:
He
grepleído en su entrada estándar. Ahí tienes, usando una pipa ...... o una cadena aquí ...
Además, es posible que desee reemplazar espacios por nuevas líneas antes de grepping:
... o puede pedir
grepimprimir solo la coincidencia:Esto te permitirá deshacerte del resto de la línea cuando haya una coincidencia.
Editar: Vaya, lee un poco demasiado rápido, gracias Marco . Para contar las ocurrencias, simplemente conecte cualquiera de estos a
wc(1);)Otra edición realizada después del comentario de lzkata , citando
$lineal usarecho.fuente
wcpara completar la tarea:grep -o <string> <<< "$variable" | wc -lecho "$line"para preservar las nuevas líneas existentes en lugar detrNo necesita llamar
grepa algo tan simple.O como una función:
Se necesitan 2 o 3 args. Proporcionar más que eso sesgará sus resultados. Puedes usarlo como:
... que imprime el recuento de ocurrencias de
.in...si ocurre al menos 2 veces. Me gusta esto:Si
$_occurestá vacío ounsetcuando se invoca, no afectará a ninguna variable de shell yreturn1 si"$2"ocurre en"$1"menos de una"$3"vez. O, si se llama con solo dos args, seráreturn1 solo si"$2"no está en"$1". De lo contrario, devuelve 0.Y así, en su forma más simple, puedes hacer:
... que imprime ...
...pero...
... imprimirá ...
También puede escribirlo de manera un poco diferente y omitir las comillas
$2en la declaración(*"$2"*)y"${1#*"$2"}". Si haces eso, puedes usar globos de concha para partidos comosh[io]tepara la prueba de partidos.fuente
bashydash/sh(y probablemente en algunos otros).