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:
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'.
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
¿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.
cat
en ambos casos. El primero podría ser escritogrep ' ' a.txt
, el segundo alterado de manera similar.\s
tambié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]
.-m
opcional) a uno ...Respuestas:
Si desea obtener solo un espacio al hacer su pregunta, usaría algo como:
o para variantes POSIX:
o la variante POSIX menos legible:
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
-E
opción especificada por POSIX que permite expresiones regulares extendidas.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
En 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 versionesgrep
que entiendan\s
, puede acortar la expresión para no espacio[^\s]
a\S
Creo que lo encontré:
fuente
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?
fuente
'\s '
coincidirá con al menos dos espacios seguidos, porque agregó un carácter de espacio después del grupo de caracteres\s
.\s
, mi error.