grepを使用してファイルを検索する

grepを使用してファイルを検索する

返信: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

おすすめ記事