Respostas:
Você pode usar uma classe de personagem :
/[^\s\\]/
corresponde a qualquer coisa que não seja um caractere de espaço em branco nem a \
. Aqui está outro exemplo:
[abc]
meios "match a
, b
ou c
"; [^abc]
significa "corresponder a qualquer caractere exceto a
, b
ou c
".
$0~/\s*^\s/
seguido por qualquer caractere que não seja um espaço em branco
/^\s+/
- início da linha, seguido por um ou mais caracteres de espaço em branco.
g
modificador. /[^\s\\]/g
Você pode usar um lookahead:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. O seguinte funcionou bem para mim (?=\S)[^"]*
.
Isso funcionou para mim usando sed [ Editar: o comentário abaixo aponta que o sed não é compatível com \ s]
[^ ]
enquanto
[^\s]
não
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\s
corresponde a mais do que apenas o caractere de espaço. Ele inclui TAB, retorno de carro alimentação de linha, e outros (como muitos outros depende do sabor de regex). É uma invenção do Perl, originalmente uma abreviação para a classe de caracteres POSIX [:space:]
, e não tem suporte em sed
. Seu primeiro regex acima deve ser s/[^[:space:]g]//g
.
echo "ghai ghai" | sed "s/[^[:space:]g]//g"
:g g
No meu sistema: CentOS 5
Posso usar \s
fora das coleções, mas tenho que usar [:space:]
dentro das coleções. Na verdade, só posso usar [:space:]
dentro de coleções. Então, para combinar um único espaço usando isso, eu tenho que usar o [[:space:]]
que é realmente estranho.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
Esses dois não funcionarão:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])
vez de ([^\s])
. Estou no openSUSE Tumbleweed 2018 04 03.
^
interpretado como negação e quando como início de linha? A esse respeito, por que isso não vai corresponder a uma linha começando com o número de espaços em branco$0~/\s*^\s/