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, bou c"; [^abc]significa "corresponder a qualquer caractere exceto a, bou 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.
gmodificador. /[^\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
\scorresponde 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 \sfora 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/