Соответствие противоположности [[:blank:]] символьному классу в sed

Я не могу найти способ представить инверсию класса символов в sed. Если бы это была Perl-подобная среда, я бы использовал [^\s]. Однако в sed это выглядит как не-s, а не-пробел.

В строке текста (из gdrive) мне нужно захватить первый токен без пробелов и игнорировать все после (и в том числе) первого пробела в строке.

Вот фальшивый, но представительный пример ввода, который я пытаюсь проанализировать:

19845fake-FaKeE-xbk534sWsbBQ              mydir                                    dir               2019-01-01 19:10:44

Моей первоначальной попыткой сделать это была строка:

sed -rn 's/^([^\s]*).*$/\1/p'

Поначалу казалось, что это работает, пока я не заметил, что это обрезается с первого "а", а не с первого пробела.

С тех пор я пытался различные перестановки, такие как:

#matches up to the first 's'
 sed -rn 's/([^\\s]*).*$/\1/p'

#matches only the first character
 sed -rn 's/^([^[[:blank:]]]*).*$/\1/p'

#matches nothing at all
 sed -rn 's/^([[^:blank:]]*).*$/\1/p'



sed -rn 's/^\s*([^\s]*).*$/\1/p'

Ожидается: 19845fake-FaKeE-xbk534sWsbBQ

Фактически: 19845fake-FaKeE-xbk534

1 ответ

Решение

Класс персонажа [:blank:] так, чтобы соответствовать противоположности, вам просто нужно [^[:blank:]], Это должно работать:

sed -rn 's/^([^[:blank:]]*).*$/\1/p' 
Другие вопросы по тегам