cd "$dir" && \
find. -type d ! -name. -mtime +"$days" \
! -exec sh -c 'printf %s\\n "${1/./$PWD}" | grep -qFf /users/nordic/tokeep' {} {} \; \
-print0 -prune -o -type f -mtime +"$days" -delete |\
xargs -r0 rm -r
cd
попадании в реж. чье имя хранится в $dir
мы find
, которая жонглирует между следующими :directory
:file
удалите их, если они старше $дней. xargs
будут переданы старые каталоги, которые будут удалены. Предполагая, что вы заранее знаете имена переменных, (например. $myname
, $myage
и $mycity
), которые вы хотите изменить, вы можете использовать sed
:
sed -i '/^\$myname=/s/=.*$/=good/g' input_file_name
sed -i '/^\$myage=/s/=.*$/=good/g' input_file_name
sed -i '/^\$mycity/s/=.*$/=good/g' input_file_name
По сути, это просто говорит о том, что регулярное выражение должно запускаться только для строк, которые начинаются с определенного совпадения (строк с ^\$myname=
, ^\$myage=
или ^\$mycity=
), и заменяет знак равенства плюс все последующие (=.*$
). ] со знаком равенства и соответствующей строкой(=good
).
ПРИМЕЧАНИЕ. :Если опция -i
недоступна в вашей версии sed
, вместо этого рассмотрите следующее для того же эффекта:
sed '/^\$myname=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$myage=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$mycity/s/=.*$/=good/g' input_file_name > output_file_name
Я думаю, что sed — это подходящий инструмент для того, что вы хотите сделать, вот моя реализация -вместо того, чтобы что-то искать, я отрицаю то, что вы защищаете:
sed -r '/^((\$myvar1)|(\$myvar2))/!s/=.*$/="good"/g'
Чтобы пропустить первые две строки, вы можете использовать:
sed '3,$s/=.*/=good/' file
Это замена строки 3 в последнюю строку($
).
Это то, что вы ищете? С помощью GNU sed.
sed -E '/var[0-9]/!s/(=).*/\1good/' file