Linux sed - encontrando uma cadeia curinga sem espaços

0

O comando sed pode usar um ponto final para encontrar um símbolo de curinga, e assim . * recupera tudo na linha.

É possível dizer que eu desejo algum símbolo, exceto (neste caso) espaços? Então:

FredSmith - seria válido

Fred&Ginger - seria válido

6times7 - seria válido

One too many - não será válido

    
por HugMyster 08.06.2017 / 12:23

2 respostas

4

Sim, é possível.

echo "One too many" | sed -n '/^[^[:space:]]*$/p'

O comando acima não retorna nada

echo "FredSmith" | sed -n '/^[^[:space:]]*$/p'
FredSmith

Enquanto o último imprime FredSmith

  • [:space:] - classe de caractere POSIX para caracteres de espaço

  • /^[^[:space:]]*$/p - significa "correspondência de impressão se contiver apenas caracteres não espaciais [^[:space:]] " (classe de caracteres negada )

por 08.06.2017 / 12:30
1

Use classes de caracteres negadas ( [^ ] ou [^[:space:]] ) como mostrado por Roman ou inverta a correspondência como abaixo. Qual deles é melhor depende da estrutura circundante.

$ cat foo.txt
with space
spaceless
$ sed '/ /d'  < foo.txt     # (d)elete the line on match
spaceless
$ sed -n '/ /!p' < foo.txt  # (p)rint if the pattern does not (!) match
spaceless
    
por 08.06.2017 / 13:14