파일에서 패턴을 찾아 패턴뿐만 아니라 전체 단어를 가져옵니다.

파일에서 패턴을 찾아 패턴뿐만 아니라 전체 단어를 가져옵니다.
  1. 항목 목록

인터페이스 주소:

abcd_Server1 CCDDomain
defg_Server1 GGFDomain
kdkhs_Server1 CCDDomain
abce_Server1 CCDDomain
dgdg_Server1 CCADomain
dfdkhs_Server1 GGFDomain

"Domain"이라는 단어를 검색한 다음 해당 단어의 고유한 발생 횟수를 계산해야 합니다.

CCDDomain위의 예에서는 3개의 다른 이름( , GGFDomain, CCADomain) 이 있으므로 출력은 3이 되어야 합니다.

나는 이것을 사용해 보았습니다 :

grep -oh '*Domain' "ServerNames.txt" | sort -u | wc -l 

("-오" 다른 답변에서 얻었습니다)

답변1

발생 횟수가 다를 때마다성격grepGNU와 호환되는 도메인을 포함합니다 .

  • 다음으로 구분된 단어의 경우간격수치:

    <file grep -o '\S*Domain\S*' | sort | uniq -c
    
  • ~을 위한성격일련의 숫자 또는 밑줄로 정의됩니다(다른 것은 구분 기호입니다.

    <file grep -o '\w*Domain\w*' | sort | uniq -c
    

답변2

\w일치하는 패턴을 다음과 같은 패턴으로 간단하게 래핑할 수 있습니다 .

% grep -oh "\w*Domain\w*" ServerNames.txt
CCDDomain
GGFDomain
CCDDomain
CCDDomain
CCADomain
GGFDomain

sort -u그러면 계속할 수 있습니다wc -l

% grep -oh '\w*Domain\w*' ServerNames.txt | sort -u | wc -l 
3

답변3

grep -o '[[:alpha:]]*Domain[[:alpha:]]*' ServerNames.txt | sort | uniq | wc -l

또는

grep -o '\w*Domain\w*' ServerNames.txt | sort | uniq | wc -l

[[:alpha:]]*0개 이상의 문자를 나타냅니다. 따라서 grep"Domain"을 포함한 일련의 문자를 찾아 정렬 및 고유화를 위해 출력합니다. ( -h단일 파일만 grep해야 하는 경우에는 필요하지 않습니다.)

답변4

오래됐어awk방법:

$ awk '$2 ~ /Domain/ && !a[$2]++{ cnt++ }END{ print cnt }' ServerNames.txt
3

GNU의 경우 coreutils적용할 수 있습니다(항상 Domain각 행의 두 번째 열로 나타나는 경우).

$ uniq -f1 <(sort -k2 ServerNames.txt) | wc -l
3

관련 정보