В поведении seds нет ничего странного, вы просто неправильно поняли, что существует множество различных разновидностей регулярных выражений и несколько инструментов, которые поддерживают некоторые / все из них по-разному с различными опциями и разными предостережениями.
sed по умолчанию поддерживает PREIX BRE, в то время как ваше регулярное выражение содержит PCRE (не ERE) с кучей расширений, не относящихся к POSIX. GNU и OSX / BSD sed поддерживают ERE с аргументом -E (более старые GNU seds используют -r), а GNU sed поддерживает некоторые расширения - я ожидаю, что \ S и, возможно, \ W будут работать, но не \ d. Нет sed поддерживает PCRE.
FWIW Я бы использовал awk для этого для ясности, эффективности, переносимости и т. Д.:
$ awk '{print ($NF ~ /[[:alnum:]_]/ ? $0 : "")}' file | cat -n
1
2 30876.406478 yes
3 15806.203945 no
4 15397.078939 what
5 9461.059877 8
6
Это будет работать с любым awk в любой оболочке на каждом компьютере UNIX. | cat -n
только для того, чтобы показать, что строки были удалены, а не удалены.