Фильтр sed для замены '!' для периодов и '!!' для периодов в конце строк - PullRequest
1 голос
/ 11 ноября 2010

Я хочу написать фильтр sed, который заменяет все периоды на входе восклицательными знаками, если только период не находится в конце строки, и в этом случае период заменяется двумя восклицательными знаками (т.е.

Пока что это то, что у меня есть:

sed -e 's/\./\!/g' -e 's/\!\n/\!\!\n/g' input_exp

где input_exp - файл, в котором написано несколько предложений.Команда не работает, хотя.Разве '\ n' не является правильным символом конца строки в unix / bash?Нужен ли мне дополнительный «\» перед «\ n»?

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 11 ноября 2010
sed -e 's_\.$_!!_g' -e 's_\._!_g' input_exp

Я использовал _ вместо / для немного более высокой степени читабельности.Вы также можете использовать

sed -e 's/\.$/!!/g' -e 's/\./!/g' input_exp

, если хотите, конечно.\n обозначает новую строку и не совпадает с концом строки.

2 голосов
/ 11 ноября 2010

Используйте $ для «конца строки» внутри регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...