Использование sed для выполнения замен в файле

Использование sed для выполнения замен в файле

Я пытался заменить даты в огромном файле с помощью 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обозначает sedERE:

   -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'

Связанный контент