sed шаблон, за которым следует любой одиночный символ один или несколько раз

Я хочу заменить шаблон "uid=", за которым следует любой одиночный символ, один или несколько раз. Поэтому я использую эту команду:

sed s/uid=.+/uid=something/g file

Но это не работает. Кажется, что "с последующим любым одиночным символом один или более раз" неверно, то есть .+

Есть идеи, почему?

0
05.05.2017, 17:32
2 ответа

В BSD sed или последних версиях GNU и busybox sed вы можете использовать

sed -E 's/uid=.+/uid=something/'

для совпадения одного символа один или несколько раз.

Флаг -E для sed включает расширенные регулярные выражения. Без него вы получите базовые регулярные выражения. Два набора грамматик регулярных выражений в основном одинаковы, но используют немного разный синтаксис, а расширенный набор поддерживает больше операторов.

Это заменит

uid=110

на

uid=something

. Если вы хотите сопоставить тот же символ --не с BSD sed--:

sed -E 's/uid=(.)\1*/uid=something/'

Это заменит

uid=110

с

uid=something0

Стандартные ERE не имеют обратных ссылок. GNU sed поддерживает его как расширение, но не BSD sed. Тем не менее, обратные ссылки являются функцией стандартных BRE, поэтому вы можете:

sed 's/uid=\(.\)\1*/uid=something/'

сделать их переносимыми.

2
28.01.2020, 02:33
sed 's/uid=..*/uid=something/g' file

Или:

sed 's/uid=.\{1,\}/uid=something/g' file

для posix sed

1
28.01.2020, 02:33

Теги

Похожие вопросы