大文字で始まる単語だけを探したいです。スピーチはこのパターンに従うべきです。 「ええ」。
テキストを含む.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とは見なされませんLet
。Ste
性格。
この問題を解決するためにタグを組み合わせることもできます。この場合、次grep
のperl
正規表現サポートが必要です。
grep -Po '\G(\X*(?=[^\w])\X)?\K\p{Lu}[\p{Ll}\pM]*+(?!\w)'
どこ:
\G
行の先頭または前の一致の終わりと一致します。\X
アノードクラスタと一致するため、分解を許可せずに基本文字とすべての結合トークン(またはより一般的に分解された文字)が含まれます。(?=[^\w])\X
grep -w
は、例えば単語が含まれているFoo
場合に報告されずにéFoo
éが表示されるように、単語以外の文字につながる文字素クラスタですe<U+0301>
。\K
右側の内容のみをK
読み書きするように一致開始をリセットします。と一緒に使用すると、Perl / PCREで演算子を見つけるために固定長の一致が一般的に使用されることを解決します。o
\G
\K
\p{Lu}
u
POSIX 'と同等のperlであるppercaseL
etter rpertyと文字を一致させます。p
[[:upper:]]
\pM
M
箱舟用、小型キャビネット用文字\p{Ll}
用。l
L
*+
バックトラッキングを無効にするのと似ています*
が、すべてのトークンと小文字を永久に含めるため、トークンを心配する必要はありません。(?!\w)
、否定的な眺め性格。上記がない場合は、インスタンスの返却(asを使用)を避ける必要が+
あります。(?![\w\pM])
Fe
Fé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