![/etc/passwd の Grep 専用 gid [閉じる]](https://linux33.com/image/141218/%2Fetc%2Fpasswd%20%E3%81%AE%20Grep%20%E5%B0%82%E7%94%A8%20gid%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
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
awk
1000未満の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
フラグは、pcregrep
2番目のグループのみが出力されることを示します。