Linux sed - znajdowanie ciągu znaków wieloznacznych bez spacji


0

Polecenie sed może użyć kropki, aby znaleźć symbol wieloznaczny, i tak . * Pobiera wszystko z linii.

Czy można powiedzieć, że w ogóle życzę sobie jakiegokolwiek symbolu oprócz (w tym przypadku) spacji? Więc:

FredSmith - byłby ważny

Fred&Ginger - byłby ważny

6times7 - byłby ważny

One too many- nie byłby ważny

Odpowiedzi:


4

Tak, to możliwe.

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

Powyższe polecenie nic nie zwraca


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

Podczas gdy ten drugi drukuje FredSmith


  • [:space:] - Klasa znaków POSIX dla znaków spacji

  • /^[^[:space:]]*$/p- oznacza „dopasowanie wydruku, jeśli zawiera tylko znaki spacji [^[:space:]]” (używana negowana klasa znaków)


Idealny - dziękuję! Sprawdź, czy ciekawość możesz sprawdzić w porównaniu z innymi postaciami, więc na przykład ciąg bez „Z”?
HugMyster,

@HugMyster, witamy. Tak, aby dopasować ciąg zawierający dowolny znak (w tym spację) oprócz Zznaku - użyj wzorca/^[^Z]*$/
RomanPerekhrest

1

Używaj negowanych klas postaci ( [^ ]lub [^[:space:]]), jak pokazał Roman, lub odwróć dopasowanie, jak poniżej. To, który jest lepszy, zależy od otaczającej struktury.

$ 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.