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
Если вы используете GNU grep (, который используется по умолчанию в Linux ), вы можете сделать это с опцией -P
и опережающим утверждением:
grep -Po '[0-9]+(?=(?::[^:]*){3}$)' /etc/passwd
Обратите внимание, что это невозможно сделать со стандартным 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
Можно ли использовать два grep
процесса? Если да, попробуйте:
grep -oE '^([^:]+:){3}[^:]+' /etc/passwd | grep -oE '[^:]+$'
Можно ли использовать pcregrep
вместо обычного grep
? Если это так, вы можете сделать
pcregrep -o2 '^([^:]+:){3}([^:]+)' /etc/passwd
pcregrep
расширяет функциональность опции -o
чтобы он соответствовал сгруппированной подстроке. В регулярном выражении в приведенной выше команде [^:]+:
соответствует полю файла passwd
, поэтому ^([^:]+:){3}
соответствует первым трем полям (имя пользователя, поле пароля и UID ). Следующий ([^:]+)
, который является второй группой в регулярном выражении, соответствует четвертому полю, которое является GID. Флаг -o2
указывает pcregrep
выводить только эту вторую группу.