Я пытался заменить даты в огромном файле с помощью sed. Я попробовал:
sed -ie 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test
Однако, ничего не произошло, мой файл test не изменен. Знаете, чего мне здесь не хватает?
Большое спасибо.
решение1
По умолчанию sed
используетсяосновные регулярные выражения. В BRE, {
, }
, (
, )
действуют как обычные символы. Таким образом, вам нужно будет экранировать {
и }
:
sed -i 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test
Вам не нужно будет экранировать их, если вы используете расширенные регулярные выражения, т. е.
sed -r -i 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test
Опция -r
обозначает sed
ERE:
-r, --regexp-extended
use extended regular expressions in the script.
Более того, -e
в вашем примере using излишне.
решение2
Попробуйте экранировать фигурные скобки:
sed -ie 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test
решение3
Или
echo "foo 2014-01-01 bar" | sed -r 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g'
или
echo "foo 2014-01-01 bar" | sed 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g'