sed
поддерживает «основное регулярное выражение» (BRE), которое не предлагает +
в качестве специального оператора.
Правильная замена +
будет
sed 's/#[[:alnum:]]\{1,\}/replacement/g'
или
sed 's/#[[:alnum:]][[:alnum:]]*/replacement/g'
GNU sed
и недавнее BSD sed
предложение "Расширенное регулярное выражение" (ERE) соответствия:
sed -E 's/#[[:alnum:]]+/replacement/g'
(хотя с GNU sed
вы шо пакетирования, вероятно, использовать -r
поскольку -E
в настоящее время незарегистрированные)
и они также предлагают \+
как расширение BRE
,
sed 's/#[[:alnum:]]\+/replacement/g'
Если вам нужна портативность, вы должны придерживаться с BRE
регулярного sed
.
@ user784637 Я использовал [[:alnum:]]
вместо [a-zA-Z0-9]
. Это также соответствовало бы буквам с диакритикой, например.
$ printf "%s\n" ë è é | grep '[a-zA-Z0-9]'
$
против
$ printf "%s\n" ë è é | grep '[[:alnum:]]'
ë
è
é
$
Вы можете использовать либо, что соответствует вашим потребностям ..
Откройте дверцы отсека, HAL – user784637
Прошу прощения, Дэйв, боюсь, я не могу этого сделать. – Scrutinizer