Как заменить позиционированное значение в файле в Linux/Solaris

Проблема может заключаться в том, что командная строка

sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

перенаправит вывод команды sudo, используя личность исходного пользователя для выполнения перенаправления -, и, поскольку вам нужен root-доступ для записи в /etc/sudoers, это не удастся. Команда echoзапускается от имени пользователя root, но не выполняет перенаправление -, которое уже было настроено оболочкой, которая готовила командную строку sudo echo...к выполнению. И поскольку вы используете здесь sudo, я подозреваю, что оболочка не была запущена от имени пользователя root.

Вы можете перефразировать это как:

echo "test ALL=(ALL)       NOPASSWD: ALL" | sudo tee -a /etc/sudoers >/dev/null

В этой версии:

  • команда echoвыполняется от имени исходного пользователя
  • перенаправление на /dev/null выполняется от имени исходного пользователя
  • , но tee -a <filename>добавляет копию передаваемого по конвейеру ввода в указанный файл как root, что именно то, что вам нужно.
0
05.02.2020, 12:36
1 ответ
awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' file
  • Устанавливает разделители полей ввода и вывода на |, чтобы сохранить разделители в вашем файле
  • Проверяем третье поле, если оно равно "NULL", затем присваиваем ему значение -, если нет, сохраняем значение как есть.
  • 1в конце печатает вашу строку с измененным 3-м столбцом или без него в зависимости от того, был ли наш тест успешным или нет.
  • ($3=="NULL"?"-":$3)— тернарный оператор, проверяющий, верно ли условие $3=="NULL". Если true ?, то мы присваиваем -, а если false :, мы оставляем поле как есть.

Тесты

$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah


$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah

$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|

$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|
1
28.04.2021, 23:24

Теги

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