/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つを省略して一致を開始するようにこの正規表現をどのように変更しますか[^:]+? (^行の先頭と一致するので、名前を抽出でき、コロン3つ以降の位置と一致したいと思います。)

PSワン持つ使用grep

答え1

これは不可能標準と同様に、grep与えられたgrepパターンに一致する行全体が常に返されます。 GNUは可能grepですが、他の多くのタイプのUniceに移植することはできず、メンテナンス(またはより興味深いタスクを実行するために変更)が困難で理解しにくいです。

使いやすくなりましたawk:

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

これによりpasswdデータがインポートされ、4番目:に区切られたフィールドが抽出されます。

または、より簡単に以下を使用してくださいcut

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

awk1000未満のUIDのGIDのみを取得するなど、より興味深い処理を実行できますが:

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

:出力で3番目に区切られた列を解析することを選択することもできます。getent groupこれは重複項目を提供しないという追加の利点があります。

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

答え2

GNU grep(Linuxの基本コマンド)を使用している場合は、-Pオプションと予測アサーションを使用してこれを実行できます。

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

答え3

2つのプロセスが許可されていますかgrep?その場合は、以下を試してください。

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

答え4

pcregrep一般の代わりに許可されていますかgrep?もしそうなら、

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

pcregrep-oグループ化された部分文字列と一致するようにオプション機能を拡張します。上記のコマンドの正規表現では、ファイルフィールドが一致するため、[^:]+:最初passwdの3^([^:]+:){3}つのフィールド(ユーザー名、パスワードフィールド、およびUID)が一致します。以下は([^:]+)正規表現の2番目のグループで、4番目のフィールドGIDと一致します。この-o2フラグは、pcregrep2番目のグループのみが出力されることを示します。

関連情報