Вам нужно использовать grep
? Вот пример sed
на всякий случай:
$ echo "john's apostrophe is a 'challenge'" | sed -re "s/'(\S*)'/\1/g"
john's apostrophe is a challenge
sed
- это потоковый редактор, я использовал его для подстановки (формат s/pattern/subst/
, g
обозначает глобальный. Я сопоставляю произвольное число (*
) непробельных символов (\S
) и замените его той же группой символов, обозначив ее как \1
(я запечатлел ее в круглых скобках (...)
.
Редактировать: Хорошо, вот уродливый Perl-подобный grep
пример:
$ echo "john's apostrophe is a 'challenge'" | grep -oP "(?<=')\S*(?=')|\w+'?\w*"
john's
apostrophe
is
a
challenge
Понятия не имею, что я сделал, так что неожиданное поведение вероятно:)
С помощью grep
я использовал положительные обратные утверждения для сопоставления либо слово в одинарных кавычках (утверждения используются для того, чтобы кавычки не были частью совпадения) или (|
) слово с необязательным апострофом, которое представлено «одним или несколькими символами слова» (\w+
), за которыми следует '
(или нет), а затем, при необходимости, снова некоторые символы слова .
Подробнее: вот команда sed
, которая, кажется, выполняет эту работу и справляется с примером @ tchrist:
$ echo "john's apostrophe is a 'challenge'" | sed -re "s/(\W|^) '(\w*)'(\W|$)/\1\2\3/g"
john's apostrophe is a challenge
$ echo "’Tis especially hard, ’tisn’t it now, to leave it for the dogs’ breakfast, let a lone for the cats'" | sed -re "s/(\W|^)'(\w*)'(\W|$)/\1\2\3/g"
’Tis especially hard, ’tisn’t it now, to leave it for the dogs’ breakfast, let a lone for the cats'