大文字と小文字が混在する単語の正規表現

大文字と小文字が混在する単語の正規表現

大文字と小文字が混在する文で特定のパターンが表示されるかどうかを識別するのに役立つ正規表現が必要です。

説明する:

キツネは岩の上に飛びました。

jumped今パターンに小文字があるかどうかを知りたいです。この目標をどのように達成できますか?

もっと明確に説明します。私が望むのは、コードファイルのキーワードを大文字にすることです。これを行うには、まだ大文字で表示されていないキーワードを識別する必要があります。

Replace理想的にはこれを行う必要がありますREPLACE

ただし、そのような場合を見つけるには、単語に小文字があるかどうかを識別できる必要があります。

答え1

printf %s\\n 'juMPEd'| sed 's/[^[:lower:]]//g'

出力

jud

答え2

Perlはこれをかなり簡単に行うことができます。

$ echo 'Fox juMPed the rock' | perl -pe 's/jumped/\U$&/i'
Fox JUMPED the rock

大文字と小文字を区別しない項目を見つけて、jumped大文字のバージョンに置き換えます。

答え3

grep -ioE を使用すると、与えられた正規表現に一致するすべてのエントリを取得できます。

$ echo "abc jumped def Jumped fgh JUMPED klm" > file.txt
$ grep -ioE "j\w+" file.txt > matches.txt
$ cat matches.txt
jumped
Jumped
JUMPED

これで、結果を繰り返して、子/親の一致を完全に削除できます(bash)。

$ for w in $(cat matches.txt); do if [[ ! $w == ${w^^} && ! $w == ${w,,} ]]; then echo $w; fi; done > mixed.txt
$ cat mixed.txt
Jumped

混合単語ごとにsedを呼び出すことで、指定した一致を大文字で表示できます。

$ for w in $(cat mixed.txt); do sed -i "s:$w:${w^^}:g" file.txt; done

答え4

これは構成を通じてシェル内で完全に実行できますcase

string='Fox juMPed the rock'
case "$string" in
  *[:lower:]*) echo "The string contains lowercase letters.";;
esac

kshではtypeset -u。原稿がすべて大文字であるかどうかは重要ではありません。

string='Fox juMPed the rock'
typeset -u string
echo "SHOUTING: $string"

ファイルを操作している場合は、awkとそのtoupper関数を使用して文字列を大文字に変換できます。s大文字かどうかをテストするために使用できますが、関係なくs == toupper(s)使用することもできますtoupper(s)

関連情報