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 comandogrep
está esperando un archivo en su lugarRespuestas:
He
grep
leí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
grep
imprimir 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
$line
al usarecho
.fuente
wc
para completar la tarea:grep -o <string> <<< "$variable" | wc -l
echo "$line"
para preservar las nuevas líneas existentes en lugar detr
No necesita llamar
grep
a 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
$_occur
está vacío ounset
cuando se invoca, no afectará a ninguna variable de shell yreturn
1 si"$2"
ocurre en"$1"
menos de una"$3"
vez. O, si se llama con solo dos args, seráreturn
1 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
$2
en la declaración(*"$2"*)
y"${1#*"$2"}"
. Si haces eso, puedes usar globos de concha para partidos comosh[io]te
para la prueba de partidos.fuente
bash
ydash
/sh
(y probablemente en algunos otros).