返信:grepコマンド。
私たちの学校のLinuxシステム上のすべての学生の名前をファイルから検索する必要があります。私はこれをすることができ、約665の名前を返すことができました。 (ファイルの最初の文字列/etc/passwd
)。
ここでは、名前が「o」で終わる生徒と、名前に「o」が複数ある生徒を並べ替える必要があります。
これは事実私のためではありません。本当に宿題ですが、友達のためです。
宿題する年齢は過ぎました:)
彼は結果を得るためにgrepを使用しなければなりませんでした。
私は何年もgrepを使用していません。しばらくgrepで遊んでいましたが、それを達成するために他のコマンドを使用することは避けられませんでした。コミュニティの誰かがgrepを使ってこれを行う方法を知っているかどうか疑問に思います。
/etc/passwd
文字 'o' で終わるファイル名の場合:
grep -Eo '^[a-zA-Z0-9._-]+' /etc/passwd | grep -Eo 'o$'
この方法は機能しますが、フルネームは表示せず、ファイル内の要求に一致する単一の項目に対して「o」文字のみを表示します。
わからない:
1)出力、つまりフルネームを表示する方法は? 2)名前に複数の「o」を含む名前を検索するには?
たとえば、/etc/passwd
ファイル内の...文字「o」で終わる1つのファイルにすべてのユーザーの出力を表示したいとします。複数の文字「o」を含む他のファイルにすべてのユーザーを表示したいと思います。
ベストアンサー1
まだあなたが何をしたいのか完全にはわかりませんが、これは役に立ちます。
複数を含む名前を取得するo
:
$ awk -F':' '$1~/.*o.*o/{print $1}' /etc/passwd
root
nobody
colord
foo
または
cut -d':' -f 1 /etc/passwd | grep '.*o.*o.*'
またはgrep
(この場合は愚かなことです)、末尾のsed
コロンを使用して削除します。
grep -oP '^.*?:' /etc/passwd |grep '.*o.*o.*' | sed 's/://'
本当に単独で使用する必要がある場合は、grep
以下を試してください。
grep -oP '^.*?:' /etc/passwd |grep '.*o.*o.*' | grep -o '[^:]*'
o
複数を含み、次に終わる名前を取得しますo
。
awk -F':' '$1~/.*o.*o/{print $1}' /etc/passwd | grep 'o$'
または
cut -d':' -f 1 /etc/passwd | grep '.*o.*o.*' | grep 'o$'
純粋なgrep:
grep -oP '^.*?:' /etc/passwd |grep '.*o.*o.*' | grep -o '[^:]*' | grep 'o$'
出力を別のファイルに保存
cut -d':' -f 1 /etc/passwd | grep '.*o.*o.*' > two_os.txt
cut -d':' -f 1 /etc/passwd | grep '.*o.*o.*' > last_o.txt