В чем разница между «sudo -s» и «su root»?

Ваши данные состоят из шести;-полей с разделителями, и вы хотите заменить точки в полях со 2 по 5 (, а не 1 или 6 )запятыми.

Это проще всего сделать с помощьюawk:

awk -F ';' 'BEGIN { OFS=FS } { for (i=2; i<=5; ++i) gsub("\\.", ",", $i); print }' file

С приведенными примерными данными получается

2019-03-17T11:32:28.143343Z;1234,5678;901,234;567,89012;3456,78;192.168.0.1

Код просто выполняет итерацию полей с разделителями;-каждой строки ввода и вызывает gsub()для выполнения глобального поиска и замены (, как вы сделали бы с s/\./,/gили y/./,/вsed)на отдельные поля, по которым повторяется цикл.

Затем распечатывается измененная строка.

Опция -Fустанавливает разделитель полей ввода в виде точки с запятой, и мы используем блок BEGIN, чтобы также установить разделитель полей вывода на то же значение (, что в противном случае вы получили бы поля, разделенные пробелом -).


Используя sed, вы можете сделать что-то вроде

sed 's/\./,/2; s/\./,/2; s/\./,/2; s/\./,/2' file

То есть, замените 2-ю точку четыре раза (, какая из них является 2-й точкой, будет меняться при каждой замене, поскольку вы заменяете их ). Однако это предполагает, что количество значений в каждом поле остается постоянным.

Чтобы обойти эту проблему, если в какой-то момент у вас есть более двух -точек, разделенных полем, вы можете

sed 'h; s/^[^;]*;//; s/;[^;]*$//; y/./,/; G;H;x; s/;[^\n]*\n/;/; s/\n.*;/;/' file

Короче говоря, эти команды выполняют

  1. Скопируйте исходную строку в область хранения.
  2. Удалить первое и последнее поля в пространстве шаблонов.
  3. Замените все точки на запятые в пространстве шаблонов (, это команда y). Все точки, которые должны были превратиться в запятые, теперь изменены. Теперь мы должны собрать строку из среднего бита в пространстве шаблонов и исходных данных в пространстве хранения.
  4. Создайте (с помощью G;H;x), чтобы пространство шаблонов содержало

    .
    1. Исходная строка, за которой следует новая строка,
    2. Модифицированный средний бит, за которым следует новая строка
    3. Снова исходная строка.
  5. Итак, теперь пространство шаблонов содержит три строки . Удалите все, кроме первого поля в первой строке и новой строки, и замените этот удаленный бит на ;.

  6. Сделайте то же самое с последней строкой, то есть удалите (теперь одинокую )новую строку и все до последней ;и замените на ;.

  7. Готово.

Или вы можете просто использовать код awk.

0
29.06.2020, 04:55
1 ответ

Существует множество отличий, главное из которых заключается в том, что sudo -sзависит от пользователя, имеющего привилегии sudoer, тогда как su rootтребует, чтобы пользователь имел пароль root.

В качестве примечания -

С точки зрения безопасности гораздо лучше назначать пользователям привилегии sudoer для доступа к корневой оболочке, чем передавать пароль root, который пользователи могут использовать через su root. Если у пользователя есть пароль root, он может получить root в любое время. Если им назначены привилегии через /etc/sudoers, то доступ к корневой оболочке может быть отозван в любое время.

2
18.03.2021, 23:23

Теги

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