Дата замены с текущей датой

Существует две проблемы с Вашей первой попыткой. {.*} содержит специальные символы, которые должны быть защищены от расширения оболочкой; поместите кавычки вокруг шаблона. Кроме того, {.*} соответствует самому длинному разделенному тексту фигурной скобки на строке, поэтому если у Вас есть строка, содержащая hello {test1} world {test2} howdy затем вывод {test1} world {test2} потому что .* подобранный test1} world {test2.

Следующее произведет только, что между скобками.

grep -o -e "{[^}]*}" 

Моя исходная формулировка использовала "{.*}", но с этим самая широкая скобка нашла в строке, не, самый маленький будет возвращен...

3
28.01.2015, 00:53
3 ответа

Можно использовать sed:

sed "s/yyyymmdd/$(date '+%Y%m%d')/g" abc.fil

, которая заменяет строку yyymmdd на текущую дату, отформатированную по желанию.

Правка:

Если yyymmdd - это просто формат даты, которую вы хотите заменить, то используйте эту команду (предполагается, что GNU sed):

sed -r "s/[12][0-9]{3}[01][0-9][0-3][0-9]/$(date '+%Y%m%d')/g" abc.fil

Длинный шаблон регулярного выражения означает следующее: Первая цифра может быть 1 или 2 ([12]), следующие три могут быть все от 0 до 9 ([0-9]), это год. Теперь месяц: первая цифра может быть 0 или 1, а вторая - все от 0 до 9 ([01][0-9]). И, наконец, то же самое с днем.

4
27.01.2020, 21:12
> today=$(date +%Y%m%d)
> sed "s/yyyymmdd/${today}/g" abc.fil
o/p: 20150127.xyz.doc
20150127.mno.dat
abc.txt
2
27.01.2020, 21:12

попробуйте

cat abc.fil | sed s/yyyymmdd/`date +%Y%m%d`/
1
27.01.2020, 21:12

Теги

Похожие вопросы