¿Cómo grep un espacio en el texto?

cat a.txt| grep " " 

o

cat a.txt| grep "\s " 

Comentarios

  • Uso gratuito de cat en ambos casos. El primero podría escribirse grep ' ' a.txt, el segundo alterado de manera similar.
  • Tenga en cuenta que \s también coincide con tab, return, pestaña vertical, avance de formulario y, técnicamente, nueva línea. Si solo desea hacer coincidir el espacio y la tabulación, use [[:blank:]] o [ \t].
  • Con gnu grep, puede limitar el número de coincidencias (opción -m) a una …
  • Esto es más simple egrep " \ s " a.txt

Responde

Si quieres grep para un solo espacio, como lo hizo en su pregunta, usaría algo como:

grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt 

o para variantes POSIX:

grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt 

o la variante POSIX menos legible:

grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt 

Suponiendo que desea excluir líneas que contienen más de un espacio adyacente , esto requiere explícitamente que haya un espacio, no precedido por un espacio y no seguido por un espacio.

Además, vale la pena señalar que no todas las versiones de grep admiten controles de expresión regular «\ s».

Comentarios

  • Puede omitir todas esas barras invertidas del último ejemplo y mejorar la legibilidad mediante el uso de la opción -E especificada por POSIX que habilita expresiones regulares extendidas. grep -E '(^|[^ ]) ([^ ]|$)' a.txt En cualquier caso, la barra invertida antes del espacio no es ' t necesaria y ' falta una antes del paréntesis de cierre final. Además, para las versiones de grep que entienden \s, puede acortar la expresión para [^\s] a \S
  • Sin embargo, esto también funciona, [[: blank:]]

Responder

Creo que lo encontré:

grep "\+[[:space:]]\+" a.xml 

Respuesta

La variante 2 solo encontrará dos espacios. Si usa "\s" en su lugar, ambas variantes funcionarán.

Podrías probar esto fácilmente tú mismo, entonces, ¿cuál es tu pregunta real?

Comentarios

  • ¿Por qué solo buscar dos espacios? Creo que coincide con cualquier espacio.
  • @Gnouc: la variante 2 mientras la escribe '\s ' coincidirá con al menos dos espacios seguidos, porque agregó un espacio carácter después del grupo de caracteres \s.
  • Usted ' tiene razón, yo no ' No veo el espacio después de \s, mi error.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *