/etc/passwd의 Grep 전용 gid [닫기]

/etc/passwd의 Grep 전용 gid [닫기]

grep의 그룹 ID 만 포함하고 싶습니다 /etc/passwd. 이제 이름을 찾는 방법을 알아냈습니다.

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

이것은 나에게 다음을 제공합니다:

[frynio@manjaro ~]$ grep -oE '^[^:]+' /etc/passwd
root
nobody
dbus
bin
daemon
mail
ftp
http
systemd-journal-remote
systemd-coredump
uuidd
dnsmasq
rpc
usbmux
avahi
colord
cups
deluge
git
lightdm
nm-openconnect
nm-openvpn
ntp
polkitd
frynio

:처음 세 개를 생략 하고 일치를 시작하도록 이 정규식을 어떻게 변경합니까 [^:]+? ( ^줄의 시작 부분과 일치하기 때문에 이름을 추출할 수 있고 콜론 3개 이후의 위치와 일치하는 것을 원합니다.)

PS 하나가지다사용grep

답변1

이는불가능한표준과 마찬가지로 grep주어진 grep패턴과 일치하는 전체 행이 항상 반환됩니다. GNU는 가능 grep하지만 다른 많은 유형의 Unices에 이식할 수 없고 유지 관리(또는 더 흥미로운 작업을 수행하기 위해 수정)가 어렵고 이해하기 어렵습니다.

사용이 더 쉬워졌습니다 awk:

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

이렇게 하면 passwd데이터를 가져오고 네 번째 :로 구분된 필드가 추출됩니다.

또는 더 간단하게 다음을 사용하십시오 cut.

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

awk1000보다 작은 UID의 GID만 가져오는 등 더 흥미로운 처리를 수행할 수 있지만 :

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

:출력에서 세 번째로 구분된 열을 구문 분석하도록 선택할 수도 있으며 getent group, 이는 중복 항목을 제공하지 않는다는 추가 이점이 있습니다.

getent group | cut -d ':' -f 3

답변2

GNU grep(Linux의 기본 명령)을 사용하는 경우 -P옵션 및 예측 어설션을 사용하여 이를 수행할 수 있습니다.

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

답변3

두 가지 프로세스가 허용됩니까 grep? 그렇다면 다음을 시도해 보십시오.

grep -oE '^([^:]+:){3}[^:]+' /etc/passwd | grep -oE '[^:]+$'

답변4

pcregrep일반 대신 허용됩니까 grep? 그렇다면 이렇게 하면 됩니다

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

pcregrep-o그룹화된 하위 문자열과 일치하도록 옵션 기능을 확장합니다 . 위 명령에 대한 정규식에서는 파일 필드가 [^:]+:일치하므로 passwd처음 ^([^:]+:){3}세 필드(사용자 이름, 비밀번호 필드 및 UID)가 일치합니다. 아래는 ([^:]+)정규 표현식의 두 번째 그룹으로, 네 번째 필드인 GID와 일치합니다. 이 -o2플래그는 pcregrep두 번째 그룹만 출력됨을 나타냅니다.

관련 정보