bashスクリプトで大文字で始まる単語をフィルタリングする方法は? text.txtがありますが、大文字(Nnnn)で始まる単語だけを探したいと思います。

bashスクリプトで大文字で始まる単語をフィルタリングする方法は? text.txtがありますが、大文字(Nnnn)で始まる単語だけを探したいと思います。

大文字で始まる単語だけを探したいです。スピーチはこのパターンに従うべきです。 「ええ」。

テキストを含む.txtファイルがあります。私は成功せずにgrepを使ってみました。

答え1

したがって、大文字の後に4つの文字が続く必要があります。たとえば、次のようになります。

$ cat test
lower
Upper
notrequired
This1
$ grep '[A-Z]....' test
Upper
This1

点(.)は改行文字を除くすべての文字と一致します。

答え2

grep非標準-wとオプションをサポートしている場合は、-o次のことができます。

grep -wo '[[:upper:]][[:lower:]]*'

1つの大文字と0個以上の小文字のo単語を出力しますw(この場合、単語は単語ではなく文字で区切られ、単語文字は数字または下線です)。

たとえば、次のような入力の場合:

Let's rock the UK, Stéphane! tEst Test2

次のように出力されます。

Let
Stéphane

é単一の小文字の U+00E9 文字で表すことができます。e後ろにU+0301と鋭いアクセントを組み合わせて表現すると、U+0301はU+0301とは見なされませんLetSte性格

この問題を解決するためにタグを組み合わせることもできます。この場合、次grepperl正規表現サポートが必要です。

grep -Po '\G(\X*(?=[^\w])\X)?\K\p{Lu}[\p{Ll}\pM]*+(?!\w)'

どこ:

  • \G行の先頭または前の一致の終わりと一致します。
  • \Xアノードクラスタと一致するため、分解を許可せずに基本文字とすべての結合トークン(またはより一般的に分解された文字)が含まれます。
  • (?=[^\w])\Xgrep -wは、例えば単語が含まれているFoo場合に報告されずにéFooéが表示されるように、単語以外の文字につながる文字素クラスタですe<U+0301>
  • \K右側の内容のみをK読み書きするように一致開始をリセットします。と一緒に使用すると、Perl / PCREで演算子を見つけるために固定長の一致が一般的に使用されることを解決します。o\G\K
  • \p{Lu}uPOSIX 'と同等のperlであるppercase Letter rpertyと文字を一致させます。p[[:upper:]]
  • \pMM箱舟用、小型キャビネット用文字\p{Ll}用。lL
  • *+バックトラッキングを無効にするのと似ています*が、すべてのトークンと小文字を永久に含めるため、トークンを心配する必要はありません。
  • (?!\w)、否定的な眺め性格。上記がない場合は、インスタンスの返却(asを使用)を避ける必要が+あります。(?![\w\pM])FeFéFéeU+0301

答え3

また試み

grep -o "\b[[:upper:]].*\b" file

この-oオプションは、見つかった一致のみを出力し、単語\b全体のみを考慮するようにしますman grep

\ b記号は、単語の端の空の文字列と一致します。

答え4

これは私に役に立ちました。

for i in $(cat file); do [[ $i =~ ^[A-Z].[a-z]+$ ]] && echo $i; done

関連情報