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"로 끝나는 하나의 파일에 모든 사용자의 출력을 표시하고 싶습니다. 문자 "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

답변2

제 생각에는 "o"로 끝나거나 "oo"를 포함한다는 뜻인 것 같아요.

cut -d: -f1 /etc/passwd | grep -E "oo|o$" |sort

그러나 grep 대신 grep을 사용해야 한다면 -E,

(cut -d: -f1 /etc/passwd | grep "oo"; cut -d: -f1 /etc/passwd | grep "o$" /tmp/names) |sort |uniq

펄에서는

#!/bin/env perl
use strict;
use warnings;
open(my $fh,"< /etc/passwd") || die "cannot open passwd";
while(my $line=<$fh>) {
    my @cols = split(/:/,$line);
    if( $cols[0] =~ /oo/ || $cols[0] =~ /o$/ ) { print "$cols[0]\n"; }
}

관련 정보