find. -type f -size 1033c ! -executable | xargs file | grep text
Вентилятор одного вкладыша
Оболочка никогда ничего не раскрывает внутри одной строки в кавычках.
Вам придется использовать строку в двойных кавычках для выражения sed
:
sed -i "s,^\(example=\).*,\1$(date +%m/%d)," /path/to/config.cfg
В качестве альтернативы можно использовать две строки в одинарных кавычках с подстановкой команды в двойные кавычки между ними:
sed -i 's,^\(example=\).*,\1'"$(date +%m/%d)"',' /path/to/config.cfg
В качестве альтернативы пусть date
выводит выражение sed
:
sed -i "$(date +'s,^\(example=\).*,\1%m/%d,')" /path/to/config.cfg
(но это выглядит немного неловко ).
Я сделал выражение немного короче с помощью обратной -ссылки на example=
текст. Я использую ,
в качестве разделителя для команды s///
в sed
, потому что мы имеем дело со строкой в замещающей части, которая содержит символ /
(, альтернативой было бы использование %m\\/%d
в качестве строки формата с date
для создания экранированного символа /
).
Обратите внимание, что двойные кавычки вокруг подстановки команды не нужны в первом варианте приведенной выше команды, так как все выражение sed
заключено в кавычки. Кроме того, /g
в конце команды s///
не требуется, так как нельзя ожидать, что шаблон будет совпадать более одного раза, поскольку он привязан к началу строки. Я также удалил --
, который вы использовали. Некоторые реализации sed
почти наверняка использовали бы эту строку в качестве резервного суффикса, то есть в качестве аргумента опции -для опции -i
(, например. sed
в macOS ).
Я использую date +%m/%d
для создания нужного формата даты. Это будет генерировать 06/19
для сегодняшней даты. Не хотите ли вы, чтобы в течение дня было заполнено ноль -чисел, используйте %e
вместо%d
(см.man strftime
). По-видимому, не существует стандартного формата для получения месяца без заполнения числа нулями, но если вы используете GNU date
, вы можете использовать нестандартный -формат %-m
(, т.е. date +%-m/%e
, см. man date
).