Cómo encontrar un espacio en un texto. usando grep?

13

¿Cómo grep un espacio en el texto?

cat a.txt| grep ' '

o

cat a.txt| grep '\s '
Emax
fuente
77
Uso gratuito de caten ambos casos. El primero podría ser escrito grep ' ' a.txt, el segundo alterado de manera similar.
MadHatter
1
Tenga en cuenta que \stambién coincide con tabulación, retorno, tabulación vertical, avance de formulario y, técnicamente, nueva línea. Si solo desea hacer coincidir el espacio y la pestaña, use [[:blank:]]o [ \t].
Pausado hasta nuevo aviso.
usando GNU grep, puede limitar el número de partidos ( -mopcional) a uno ...
sendmoreinfo
Esto es más simple egrep "\ s" a.txt

Respuestas:

6

Si desea obtener solo un espacio al hacer 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'.


fuente
1
Puede omitir todas esas barras invertidas del último ejemplo y mejorar la legibilidad utilizando la -Eopción especificada por POSIX que permite expresiones regulares extendidas. grep -E '(^|[^ ]) ([^ ]|$)' a.txtEn cualquier caso, la barra invertida antes del espacio no es necesaria y falta una antes del paréntesis de cierre final. Además, para las versiones grepque entiendan \s, puede acortar la expresión para no espacio [^\s]a\S
pausa hasta nuevo aviso.
Sin embargo, esto también funciona, [[: blank:]]
Emax
4

Creo que lo encontré:

grep  "\+[[:space:]]\+" a.xml
Emax
fuente
1

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

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

Sven
fuente
1
¿Por qué solo encontrar dos espacios? Creo que coincide con cualquier espacio.
Cuonglm 05 de
1
@Gnouc: la variante 2 a medida que la escribe '\s 'coincidirá con al menos dos espacios seguidos, porque agregó un carácter de espacio después del grupo de caracteres \s.
Sven
Tienes razón, no veo el espacio después \s, mi error.
Cuonglm 05 de