Соответствие противоположности [[: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'