regex - siguientes - sed expresiones regulares
¿Contar el patrón de expresiones regulares coincide en una línea usando sed o grep? (5)
Quiero contar el número de coincidencias que hay en una sola línea (o todas las líneas, ya que siempre habrá una sola línea).
Quiero contar no solo una partida por línea como en
echo "123 123 123" | grep -c -E "123" # Result: 1
Mejor ejemplo:
echo "1 1 2 2 2 5" | grep -c -E ''([^ ])( /1){1}'' # Result: 1, expected: 2 or 3
¿Por qué no usar awk? Puedes usar awk ''{print gsub(your_regex,"&")}''
para imprimir el número de coincidencias en cada línea, o awk ''{c+=gsub(your_regex,"&")}END{print c}''
para imprimir el número total de coincidencias Tenga en cuenta que la velocidad relativa puede variar dependiendo de qué implementación de awk se utiliza y qué entrada se proporciona.
Esto podría funcionar para usted:
sed -n -e '':a'' -e ''s/123//p'' -e ''ta'' file | sed -n ''$=''
GNU sed podría escribirse:
sed -n '':;s/123//p;t'' file | sed -n ''$=''
Puede usar grep -o
luego canalizar wc -l
:
$ echo "123 123 123" | grep -o 123 | wc -l
3
Tal vez a continuación:
echo "123 123 123" | sed "s/123 /123/n/g" | wc -l
(Tal vez feo, pero mi bash fu no es tan bueno)
Tal vez deberías convertir espacios en líneas nuevas primero:
$ echo "1 1 2 2 2 5" | tr '' '' $''/n'' | grep -c 2
3