сканування / тощо / passwd з grep


0

Я намагаюся використовувати одну команду для сканування / etc / passwd для поля gecos у форматі "User (userid) is (Real name)", тому вихід буде "User brian is Brian". Я намагаюся добру годину і не можу придумати хорошого рішення. Я впевнений, що мені потрібно використовувати grep, але не можу з’ясувати хороший спосіб це зробити.

unix  grep 

2
Хіба це не робота для awk(або Perl, Python, ...)?

Так, це могло бути.

Відповіді:


2
awk -F: '$1=="brian" {print "User", $1, "is", $8}' /etc/passwd

$1=="brian"Якщо ви хочете надрукувати кожен рядок у файлі, залиште його .


0

awk -F: '{print "Користувач", $ 1, "є", $ 5;}' / тощо / passwd

Використання awk здається кращим вибором.


0

За коментарем Паскаля вам потрібно буде використовувати таку утиліту, як awk (або Perl, Python, Ruby тощо). Ця команда awk буде працювати для файлів passwd з розділеними комами полями GECOS спочатку з реальним іменем користувача:

awk -F: '{split($5,a,","); print "User "$1" is "a[1]}' /etc/passwd

0

Ваше запитання трохи розпливчасте, але всі відповіді поки що вирішують проблему розбору рядка passwd у ваш формат. Однак ваша пропозиція щодо використання grepзмушує мене думати, що вам цікаво також вибрати конкретний запис, а не надрукувати рядок для кожного користувача в системі.

grepЦе, безумовно, одна з можливостей для цього, але я вважаю, що getentкоманда є більш чистим способом отримання записів з файлу passwd.

Оскільки існує так багато awkрішень на основі, я намагався sedзамість цього зробити розбір . Це просто, щоб мати більш колоритний набір відповідей, я б не вважав це кращим чи простішим для завдання.

#!/bin/bash
if [[ $# != 1 ]]; then
    echo "$0: wrong number of arguments"
    echo -n "Usage: "
    echo "$0 {username | UID}"
fi

getent passwd "$1" \
    | sed 's/\(.*\):.*:.*:.*:\(.*\):.*:.*$/User \1 is \2/'

Розширення сценарію для отримання довільної кількості аргументів залишається вправою для читача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.