¿Cómo grep un espacio en el texto?
cat a.txt| grep " "
o
cat a.txt| grep "\s "
Comentarios
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 degrep
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.
cat
en ambos casos. El primero podría escribirsegrep ' ' a.txt
, el segundo alterado de manera similar.\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]
.-m
) a una …