「Unix」または「unix」という単語を含むaa.txtファイルの行を印刷するコマンドを実行します。 grep、awk、およびsedコマンド(3つの異なるコマンド)を試しました。

「Unix」または「unix」という単語を含むaa.txtファイルの行を印刷するコマンドを実行します。 grep、awk、およびsedコマンド(3つの異なるコマンド)を試しました。

どのように選択しますか? 「Unix」と「Unix」

私の考えでは

  1. awkを使う

    $ awk ~"Unix|unix" {print $0}.aa.txt
    
  2. grepを使用する手がかりなし

  3. sedを使う

    $ sed "/Unix/p" aa.txt | "/unix/p" aa.txt
    

私の考えでは、これらはすべて間違っていると思います。

だから答えてください..わかりません..

答え1

文字列と一致Unixし、またはいずれかの正規unix表現です。[Uu]nix[Uu]Uu

次の3つのツールを使用して、この式に一致するすべての行を抽出できます。

  • awk '/[Uu]nix/' file

    これは、指定された条件が一致すると現在のレコード(行)を印刷するというawk事実を利用する「ショートフォーマット」プログラムです。awk不要なコードをすべて含む「長い手」のバリエーションは次のとおりですawk '$0 ~ /[Uu]nix/ { print $0 }' file

  • grep '[Uu]nix' file

    このgrepユーティリティは、単に与えられた式に一致する行を抽出します。

  • sed -n '/[Uu]nix/p' file

    このコマンドは、各行のデフォルト印刷をsedオフ(使用)します。-n次に、与えられた式に一致する行だけを明示的に印刷します。

    を使用して、sed次を選択することもできます。削除見たくない行は、各行のデフォルト印刷を使用して残りの行を印刷します。 sed '/[Uu]nix/!d' file

awkgrepおよびで、sedこのgrepユーティリティは、特定の式に一致する行を抽出する操作に最適です。awkより多くの処理または集計を必要とするタスクと状態のsed保存がほとんどまたはまったく必要ない限り、1行の修正に最も頻繁に使用されます(ただし、3つのツールはすべてそのアプリケーションで重複します)。

答え2

この問題のより厳しい部分は「一致」です。言葉UnixかUnixか」

入力ファイルの使用

$ cat -n file
     1  how do I pick them? both "Unix" and 'unix'
     2  Could be just Unix
     3  or just
     4  unix at the start of line
     5  do not match unixy or munix

1、2、4行は一致する必要がありますが、5行は一致しません。 「unix」は「単語」と表示されないためです。

また、これらのツールが組み込まれている機能を使用して大文字と小文字を区別しない一致を実行する方法も示します。

  1. grep

    $ grep -i unix file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    do not match unixy or munix
    

    -w(「完全な単語」)オプションを追加します。

    $ grep -i -w unix file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    
  2. GNU sed

    $ gsed -n '/unix/I p' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    do not match unixy or munix
    

    次に、GNU正規表現の単語境界マークを追加します。

    $ gsed -n '/\<unix\>/I p' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    

    (MacでHomebrew経由でgsedGNU sedをインストールしました)

  3. GNU awk

    $ gawk -v IGNORECASE=1 '/unix/' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    do not match unixy or munix
    
    $ gawk -v IGNORECASE=1 '/\<unix\>/' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    
  4. GNU以外のツール:Macのデフォルトのawkやsedなど

    \< \>これらのツールはGNU正規表現を使用せず、便利な単語境界もありません。大文字と小文字を区別しない一致も使用できません。結果はあまりきれいではありません。

    /usr/bin/sed -En '/(^|[^_[:alnum:]])[Uu]nix($|[^_[:alnum:]])/ p' file
    /usr/bin/awk 'tolower($0) ~ /(^|[^_[:alnum:]])unix($|[^_[:alnum:]])/' file
    /usr/bin/awk -F'[^[:alpha:]]+' '{for (i=1; i<=NF; i++) if (tolower($i) == "unix") {print; next}}' file
    

関連情報