2017-02-16 5 views
1

/etc/passwdファイルから特定のユーザーIDを取得したいと考えています。grepとregexを使用して特定のユーザーのリストをetc/passwordから取得する

与えられたユーザーIDは、6つの整数または1文字と5つの整数(この文字は、常に第2の場合のユーザーIDの最初の文字です)から正確に6文字で構成されます。私は私の/etc/passwdファイルから、この形式に一致するユーザIDだけでリストを取得するために正規表現パターンを探しています

398329 
y32839 
392009 
r39288 

:以下の例を参照してください。これは私がこれまでにやったことです:

users="$(cut -d: -f1 /etc/passwd | grep -o '[0-9]*')" 

は、私は数字でユーザーIDを取得することができますが、私の正規表現は限られているため、任意の助けをいただければ幸いです。ありがとう!

答えて

0

あなたはこのような正しい正規表現でgrepを使用することができます。

cut -d: -f1 /etc/passwd | grep -E '^[a-zA-Z0-9][0-9]{5}$' 
398329 
y32839 
392009 
r39288 

^[a-zA-Z0-9][0-9]{5}$ 6桁のユーザー名または5桁の数字が続く文字と一致します。改良として

、あなたはこの単一awkのコマンドでcut + grepを置き換えることができます。perlの正規表現と

awk -F: '$1 ~ /^[a-zA-Z0-9][0-9]{5}$/{print $1}' /etc/passwd 
0

はgrep:

grep -oP '\w:\d{5}' /etc/passwd 

例の結果:

4:65534 
x:65534 

をIお尻umeあなたはコロンで区切られたetc/passwdのパスワードで暗号化されたフィールドを参照しています。実際に手紙で始まるUIDに本当に関心がある場合は、単に正規表現の2番目のコロンを削除してください。'\w\d{5}'

関連する問題