Для Ubuntu
я добавил
в /etc/sudoers. d/
со строкой:
ALL=(ALL:ALL) ALL
Используя команду:
visudo -f /etc/sudoers.d/
Это рекомендуется, поскольку оставляет файл /etc/suoders
нетронутым и таким образом позволяет избежать конфликта (и требуемого последующего ручного разрешения) при обновлении. См: Почему /etc/sodoers.d/
Вы можете сделать это с помощью sed
, однако версия редактора Gnu
может сделать регулярное выражение менее шумным.
Основная идея состоит в том, чтобы сначала прочитать файл File2 и сохранить его в области удержания, при этом его строки разделяются новой строкой.
Затем мы читаем Файл1 и добавляем строки Файла2 из удержания к только что -прочитанной строке Файла1. Если мы можем обнаружить наличие строки File1 в области хранения, то все готово, и мы печатаем строку File2 как есть, сокращая пространство шаблонов других вещей.
В противном случае мы печатаем строку File1 с добавленным 0.
$ sed -Ee '
/ /{H;d;}
G
s/^(\S+)\n.*\n(\1 \S+)(\n.*)?$/\2/;t
s/\n.*/ 0/
' File2 File1
Вы можете сделать это в Awk
очень легко!
awk 'FNR==NR{ hash[$1]=$2; next}{ if ($0 in hash) $2 = hash[$1]; else $2 = "0" }1' file2 file1
Awk
работает, обрабатывая входные строки по одной за раз. И есть специальные пункты, которые обеспечивают Awk
, BEGIN{}
и END{}
, которые заключают в себе действия, которые должны выполняться до и после обработки файла. Каждая строка в файле разделена на основе значения специальной переменнойFS
(по умолчанию одного или нескольких пробелов ), и доступ к этим отдельным полям можно получить из $1
, $2
...$NF
Таким образом, часть FNR==NR
предназначена для обработки первого аргумента файла, указанного в команде, потому что FNR
отслеживает номера строк для обоих объединенных файлов, а NR
— только для текущего файла. Таким образом, для каждого $1
в первом файле значения хешируются в массив с именем hash
, а затем, когда происходит обработка следующего файла, часть $0 in hash
отображает эти строки в file1
. ], где присутствуют хешированные индексы из file2
. Для таких отображенных строк мы печатаем их эквивалентные значения, а для не-отображаемых строк мы печатаем 0
.
{..}1
— это краткое -ручное представление, которое нужно выполнить {..; print}
для восстановления/печати всей строки на основе модификации отдельных полей или любой из указанных специальных переменных.
Подробнее о Встроено -в разделе «Переменные, управляющие awk»