Найти и заменить после строки после определенного символа

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:
      • Это не текущий каталог, и он старше, чем $days, затем отправьте его имя в xargs на другой стороне канала, если он не найден в файле tokeep. Также не входите в этот каталог, так как он помечен для очистки.
    • OTW, для fileудалите их, если они старше $дней.
  • В xargsбудут переданы старые каталоги, которые будут удалены.
0
20.09.2019, 22:13
4 ответа

Предполагая, что вы заранее знаете имена переменных, (например. $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
-1
28.01.2020, 02:22

Я думаю, что sed — это подходящий инструмент для того, что вы хотите сделать, вот моя реализация -вместо того, чтобы что-то искать, я отрицаю то, что вы защищаете:

sed -r '/^((\$myvar1)|(\$myvar2))/!s/=.*$/="good"/g'

2
28.01.2020, 02:22

Чтобы пропустить первые две строки, вы можете использовать:

sed '3,$s/=.*/=good/' file

Это замена строки 3 в последнюю строку($).

1
28.01.2020, 02:22

Это то, что вы ищете? С помощью GNU sed.

sed -E '/var[0-9]/!s/(=).*/\1good/' file
1
28.01.2020, 02:22

Теги

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