
почему это не совпадает..?
sed -e '/--Updated?[[:space:]]+Date/d' inputfile
этот..:
--Updated Date: 2013-11-06 15:32:13
d?
потому что иногда у меня есть Update Date
, а иногда Updated Date
.
для удаления? Я тоже пробовал \s
, не работает.
решение1
вам нужно использовать -r
параметр. попробуйте использовать
sed -r '/--Updated?[[:space:]]+Date/d' inputfile
обновление ответа
При использовании sed '/something/d'
все строки, соответствующие этому выражению, будут удалены.
-r
- параметр -r - использовать расширенные регулярные выражения.
Внутри выражения есть 2 регулярных выражения.
[[:space:]]
- Соответствует всем пробельным символам, включая переносы строк
? - optional
+
- один или несколько раз.
Итак, команда sed удалит все строки, которые соответствуют --updated и одному или нескольким пробельным символам, а также дате, но из-за ? символ d является необязательным. Например:
--Updated Date: 2013-11-06 15:32:13
--Updated Date: 2013-11-06 15:32:13
--Updated Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13
решение2
Чтобы сделать это с помощью базового регулярного выражения POSIX, самое близкое, что я могу сделать, это:
sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile
К сожалению, нет реальной замены для ?
, поэтому *
используется a , который также будет соответствовать нескольким d
s. +
Однако можно заменить, просто повторив шаблон an , используя a *
для второго повторения.
Обновлять
На самом деле, чтобы получить эквивалентный эффект расширенных выражений, можно использовать два шаблона:
sed \'
/--Updated[[:space:]][[:space:]]*Date/d
/--Update[[:space:]][[:space:]]*Date/d
' inputfile
решение3
С помощью gnu sed 4.2.2 на cygwin добавьте флаг -r
:
'--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'
не выводит никаких данных. -r
включает расширенные регулярные выражения, поэтому ?
и +
будет работать так, как вы ожидаете.ссылка на расширенные регулярные выраженияЯ использую большинство пунктов, которые ?
и +
должны иметь начальную обратную косую черту в основных регулярных выражениях (по умолчанию), чтобы иметь их особое значение.