どのように選択しますか? 「Unix」と「Unix」
私の考えでは
awkを使う
$ awk ~"Unix|unix" {print $0}.aa.txt
grepを使用する手がかりなし
sedを使う
$ sed "/Unix/p" aa.txt | "/unix/p" aa.txt
私の考えでは、これらはすべて間違っていると思います。
だから答えてください..わかりません..
答え1
文字列と一致Unix
し、またはいずれかの正規unix
表現です。[Uu]nix
[Uu]
U
u
次の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
awk
、grep
およびで、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」は「単語」と表示されないためです。
また、これらのツールが組み込まれている機能を使用して大文字と小文字を区別しない一致を実行する方法も示します。
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
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経由で
gsed
GNU sedをインストールしました)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
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