ファイル内のパターンを見つけ、パターンだけでなく単語全体を取得します。

ファイル内のパターンを見つけ、パターンだけでなく単語全体を取得します。
  1. アイテム一覧

インターフェースアドレス:

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

「Domain」という単語を検索してから、その単語の一意の発生回数を計算する必要があります。

CCDDomain上記の例では3つの異なる名前(、、、GGFDomainCCADomainがあるため、出力は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各行の2番目の列として表示される場合)。

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

関連情報