Grep только gids из /etc/passwd [закрыто]

GNU Parallel теперь включает parset:

$ parset arr echo foo {} ::: a b c
$ echo ${arr[0]}
foo a
$ echo ${arr[1]}
foo b
$ echo ${arr[2]}
foo c

$ parset v1,v2,v3 echo foo {} ::: a b c
$ echo $v3
foo c

$ parset "v1 v2 v3" echo foo {} ::: a b c
$ echo $v3
foo c
0
28.10.2018, 23:15
4 ответа

Если вы используете GNU grep (, который используется по умолчанию в Linux ), вы можете сделать это с опцией -Pи опережающим утверждением:

grep -Po '[0-9]+(?=(?::[^:]*){3}$)' /etc/passwd
2
28.01.2020, 02:14

Обратите внимание, что это невозможно сделать со стандартным grep, так как grepвсегда будет возвращать полную строку, соответствующую заданному шаблону. Это было бы возможно с GNU grep, но это было бы не -переносимо на многие другие типы Unices, трудно поддерживать (или модифицировать, чтобы делать более интересные вещи ), и нетривиально -чтобы понять.

Легче сawk:

getent passwd | awk -F ':' '{ print $4 }'

При этом получаются данные passwdи извлекается четвертое:-поле с разделителями.

Или еще проще сcut:

getent passwd | cut -d ':' -f 4

хотя с awkвы сможете выполнять более интересную обработку, например, получать GID только для UID меньше 1000:

getent passwd | awk -F ':' '$3 < 1000 { print $4 }'

Можно также выделить третий:-столбец с разделителями из вывода getent group, что даст дополнительное преимущество, поскольку не даст дубликатов.

getent group | cut -d ':' -f 3
4
28.01.2020, 02:14

Можно ли использовать два grepпроцесса? Если да, попробуйте:

grep -oE '^([^:]+:){3}[^:]+' /etc/passwd | grep -oE '[^:]+$'
1
28.01.2020, 02:14

Можно ли использовать pcregrepвместо обычного grep? Если это так, вы можете сделать

pcregrep -o2 '^([^:]+:){3}([^:]+)' /etc/passwd

pcregrepрасширяет функциональность опции -oчтобы он соответствовал сгруппированной подстроке. В регулярном выражении в приведенной выше команде [^:]+:соответствует полю файла passwd, поэтому ^([^:]+:){3}соответствует первым трем полям (имя пользователя, поле пароля и UID ). Следующий ([^:]+), который является второй группой в регулярном выражении, соответствует четвертому полю, которое является GID. Флаг -o2указывает pcregrepвыводить только эту вторую группу.

0
28.01.2020, 02:14

Теги

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