Respuestas:
Puedes usar una clase de personaje :
/[^\s\\]/
coincide con cualquier cosa que no sea un carácter de espacio en blanco ni un \
. Aquí hay otro ejemplo:
[abc]
significa "coincidencia a
, b
o c
"; [^abc]
significa "coincidir con cualquier carácter excepto a
, b
o c
".
$0~/\s*^\s/
seguidos de cualquier carácter que no sea espacios en blanco
/^\s+/
: comienzo de línea, seguido de uno o más caracteres de espacio en blanco.
g
modificador. /[^\s\\]/g
Puede utilizar una búsqueda anticipada:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. : . Lo siguiente funcionó bien para mí (?=\S)[^"]*
.
Esto funcionó para mí usando sed [ Editar: el comentario a continuación señala que sed no admite \ s]
[^ ]
mientras
[^\s]
no
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\s
coincide con algo más que el carácter de espacio. Incluye TAB, retorno de carro de avance de línea, y otros (cómo muchos otros dependen del sabor de expresiones regulares). Es una invención de Perl, originalmente una forma abreviada de la clase de caracteres POSIX [:space:]
, y no es compatible con sed
. Su primera expresión regular anterior debería ser s/[^[:space:]g]//g
.
echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Rendimientos:g g
En mi sistema: CentOS 5
Puedo usar \s
fuera de colecciones pero tengo que usar [:space:]
dentro de colecciones. De hecho, [:space:]
solo puedo usar colecciones internas. Entonces, para hacer coincidir un solo espacio usando esto, tengo que usar [[:space:]]
Lo que es realmente extraño.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
Estos dos no funcionarán:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])
lugar de ([^\s])
. Estoy en openSUSE Tumbleweed 2018 04 03.
^
interpreta como negación y cuándo como comienzo de línea? En ese sentido, ¿por qué esto no coincide con una línea que comienza con un número de espacios en blanco?$0~/\s*^\s/