Получение списка пользователей путем захвата/etc/passwd

Вот мое меню 1st

default 1
timeout 8
gfxmenu (hd1,4)/message

###Don't change this comment - YaST2 identifier: Original name: linux###
title Zen-Kernel - 3.0.3-zen
root (hd1,4)
kernel /boot/vmlinuz-3.0.3-zen rw root=/dev/sda7 rw resume=/dev/sda6 
showopts quiet fastboot raid=noautodetect radeon.modeset=1    
radeon.lowpower=1 radeon.dynpm=1 video=1440x900 acpi_osi="Linux"
pcie_aspm=force thermal.act=90 acpi.power_nocheck=1 init=/sbin/sysvinit 
nohz=off
2
19.02.2013, 11:45
5 ответов

Подсказка

Каждое поле в a /etc/passwd строка разделяется двоеточием, и имя пользователя является первым полем, таким образом, необходимо отфильтровать каждую строку, чтобы только показать символам до первого двоеточия

Ответ

grep даже не близко к лучшему инструменту для того, чтобы сделать это, но если Вы будете обязаны использовать его, то это будет работать:

grep -oE '^[^:]+' /etc/passwd

-o говорит этому только возвращать часть строки, которая соответствует. -E включает расширенные регулярные выражения так + будет работать позже. ^ соответствует началу строки, [^:] соответствия что-либо кроме двоеточия, и + средства как можно больше символов. Таким образом, это будет соответствовать началу каждой строки вплоть до первого двоеточия

Если Вы можете использовать другие инструменты, кроме того, grep, вот другие обычно лучшие способы сделать его:

cut -d: -f1 /etc/passwd
sed 's/:.*//' /etc/passwd
awk -F: '{print $1}' /etc/passwd

Можно перенаправить результаты любого из тех, которые в allusers использование > allusers как Вы имеют в Вашем примере

11
27.01.2020, 21:50
  • 1
    полужирное 'Огромное спасибо за ответ на мой вопрос. Однако есть ли так или иначе, что я могу использовать канал в этой команде?' –  moon 19.02.2013, 05:51
  • 2
    @guest12 нет никакой потребности в одной, но grep может считать stdin вместо файла, таким образом, Вы могли сделать cat /etc/passwd | grep -oE '^[^:]+' вместо этого я предполагаю комментарий @MichaelMrozek –  Michael Mrozek♦ 19.02.2013, 05:53
  • 3
    Ре, Вы могли добавить a sort(1) получить их в алфавитном порядке. Бесполезное Использование CAT или UUC считают дурным тоном в Unixland. –  vonbrand 19.02.2013, 06:00
  • 4
    В то время как это корректно и хороший ответ, я не пошел бы вне подсказок, так как это было домашней работой –  jordanm 19.02.2013, 06:22

Grep не подходит для этой ситуации, попытайтесь получить файл паролей с getent и проанализируйте его с awk (двоеточие разделенное содержание),

getent passwd | awk -F ':' '{print $1}' > allusers

0
27.01.2020, 21:50

cat /etc/passwd | awk -F : '{print $1}' > alluser.txt

0
27.01.2020, 21:50
  • 1
    cat | awk ? Ничего себе, впечатляющий:/ –  Gilles Quenot 19.02.2013, 13:50
grep -o '^[a-zA-Z]*:' /etc/passwd

работы для меня.. это только печатает имена пользователей, с имен которых начинается a-zA-Z ...

0
27.01.2020, 21:50

Я использую:

grep -E 1[0-9]{3}  /etc/passwd | sed s/:/\ / | awk '{print $1}'

Только для получения не -системных или встроенных пользователей.

0
27.01.2020, 21:50

Теги

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