Я не могу согласиться, что Python более приемлемо в этом случае. Там нет сложных линий манипуляций - просто установите переменные и распечатывают различный набор. Так это обычные операции Bash '. Поэтому нам нужны некоторые расчеты, которые я предпочитаю awk
вместо SED
(обычная программа манипулирования текстами).
awk -F '' '
/\/\//{
n++
t="Name "n" "
sub("// {0,"length(t)"}","//"t)
print $0 "\n" l1 l2 > "File2"
print $0 "\n" l1 > "File3"
sub("[^ ]* ","<"t,l1)
print l1 > "data.file"
l1=""
l2=""
next
}
{
if (l1=="")
l1=$0
else l2=l2 "\n" $0
}' Input.txt
Но все предпочитают этот инструмент, который он знает лучше.
P.S. Относительно длины входной строки. Если OP Проверьте свои примеры, вы можете увидеть, что «X» выше «E» выше «E»
// x
>tex_1 abcdefghijklmnopqrstu
, но после ввода имя 1
«X» выше «D»
//Name 1 x
>tex_1 abcdefghijklmnopqrstu
, так что в сценарии Shoul Длина (T)
не Lenght (T) -1
. Кроме того, если там не хватает места для ввода имен, скрипт, делают необходимые остатки строки сдвига вправо.
Сделайте первую попытку, но удалите | xargs groups
. На самом деле, это достаточно элементарно, чтобы не все это соответствовало данному сайту...
awk (1 )es otra herramienta útil. awk puede analizar campos individuales de líneas de texto, en función de un delimitador especificado. En el caso de /etc/passwd, ese delimitador son dos puntos, por lo que pasamos ' -F :' en la línea de comandos de awk. Del mismo modo, dado que el nombre de usuario es el primer campo de la línea y awk numera los campos que comienzan en 1, estipulamos 'imprimir $1' para decirle a awk que imprima el primer campo de cada línea.
awk -F: '{ print $1 }' < /etc/passwd
Esto se puede adaptar fácilmente para imprimir cualquier campo del archivo passwd. Aquí hay una lista del nombre de cada usuario (campo 1 ), seguido de un espacio, seguido de su shell de inicio de sesión (campo 7):
awk -F: '{ print $1, $7 }' < /etc/passwd
Это будет фильтровать пользователей по тому, у кого есть оболочка:
getent passwd | egrep '(/bin/bash)|(/bin/zsh)|(/bin/sh)' | cut -f1 -d:
Вы запросили список авторизованных пользователей, и указали, что вы имеете в виду, что это будет подмножество списка всех пользователей, но вы не определили, какие критерии вы хотите использовать различать авторизованных пользователей и неавторизованных пользователей.
Системы (Unix и Windows )часто поставляются со стандартными, встроенные пользователи, предопределенные :root
, bin
, mail
и news
в Unix; Administrator
, SYSTEM
, LOCAL SERVICE
и TrustedInstaller
в Windows. В Unix «настоящие» пользователи (назначены реальным людям )обычно имеют GID≥500 и домашний каталог в /home
. Пользователи системы обычно не соответствуют обоим этим критериям. Таким образом, мы можем перечислить пользователей в /etc/passwd
, которые соответствуют этим критериям, с помощью
awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}' /etc/passwd
Если getent passwd
создает пользователей, которых нет в /etc/passwd
, вы можете просто подключить их:
getent passwd | awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}'
или объединить их:
getent passwd | sort -u - /etc/passwd | awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}'
Примечание :Этот ответ основан на ответе (, который теперь удален, только 10 КБ )по Чема .