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 '

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'.


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

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?


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.