Как раскомментировать и прокомментировать строки в /etc/fstab, сопоставив всю строку?

Спасибо, Steeldriver, я исправил это, используя приведенный ниже синтаксис

yesterday_day="$(date -d '-1 day' '+%-d')"
yesterday_month="$(date -d '-1 day' '+%b')"
yesterday="${yesterday_month}   ${yesterday_day}"

и теперь вы можете добавлять туда любые пробелы

2
12.11.2020, 15:27
2 ответа

Подход GNU Sed,

sed -Ei '/home|tmp/{s/^#//;t;s/^/#/}' file
  • /home|tmp/Если строка соответствует homeили tmp,
    • {s/^#//;t;s/^/#/}Удалите #в начале строки. Если его там нет, замените начало строки на #.

Альтернатива Awk

awk '$2 ~ /home|tmp/{ if (!( sub(/^#/, "") )) $1="#"$1} 1' file
  • $2 ~ /(home|tmp)/Если второе поле содержит homeили tmp,
    • if (!( sub(/^#/, "") ))Попробуйте сопоставить #в начале строки и удалите его. Если операция не была успешной (из-за отсутствия #в начале строки ),
      • $1="#"$1Добавить #к началу строки.
  • 1Напечатайте полученную строку.

Если у вас есть Gawk, вы можете добавить флаг -i inplaceдля редактирования файла в место -, но я считаю, что лучше перенаправить вывод в файл, а затем перезаписать исходный файл, проверив, что все прошло правильно..

2
18.03.2021, 22:50

С доступным модулем lineinfile особенно если вам нужно сделать это для нескольких хостов:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html

-1
18.03.2021, 22:50

Теги

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