У вас не может быть и того, и другого.
Только root
может редактировать файл sudoers
, что и делает visudo
. Права доступа по умолчанию для файла sudoers
— 440
, поэтому visudo
используется для его редактирования, и только root может использовать эту команду.
Команда sudo
откажется работать, если права доступа к файлу sudoers
не равны 440
во избежание разрушения системы.
Не стоит заморачиваться только потому, что вы можете попытаться избежать ввода sudo
, потому что это просто сломает вашу систему и все равно не будет работать. Безопасность, которую вы ищете, уже на месте.
Я не уверен, что утилита date
вообще требуется в вашем случае, так как вы хотите выполнить довольно простую операцию только для года (вычитание 5 лет будет просто означать уменьшение части yyyy
из dd-mm-yyyy
на 5 ).
В этом случае следующая awk
программа изменит даты в третьем столбце вашего входного файла:
~$ awk -v offs=-5 '{split($3,df,"-"); printf "%02d-%02d-%04d\n",df[1],df[2],df[3]+offs}' temp9_0.txt
04-04-2012
25-11-2009
13-06-1997
путем добавления смещения, указанного с помощью переменной offs
, к третьему (тире -, отделенному )подполем -3-го столбца, и печатью измененных значений подполя с помощью printf
. Это делается с помощью команды split
для разделения 3-го столбца в -
на массивdf
(полей даты).
Чтобы применить это к определенной строке, а не ко всем, и предполагая, что нет пустых строк, вы можете указать дополнительную переменную line
и сделать программу выборочной только для этой строки, оценивая FNR
, awk
s автоматически на -строку файла -счетчик:
awk -v line=3 -v offs=-5 'FNR==line {split($3,df,"-"); printf "%02d-%02d-%04d",df[1],df[2],df[3]+offs}' temp9_0.txt
Затем эти выходные данные могут быть перехвачены в переменной оболочки посредством подстановки команд, как в
dob_want2=$(awk -v line=3.....)