2〜3個の文字の単語をすべて大文字で書く必要があります。 1文字の単語と4文字以上の単語は同じにしてください。
入力する:
cat Example
Dog
I
Fish
su
Su adm
Amd Cat ignore
予想出力:
CAT Example
DOG
a
Fish
SU
SU ADM
ADM CAT ignore
答え1
GNUの使用sed
$ sed -E 's/\<[[:alpha:]]{2,3}\>/\U&/g' input_file
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
答え2
代わりにPerlを使用します。
$ perl -pe 's/\b\w{2,3}\b/uc($&)/eg' file
CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
ファイルにUTF-8でエンコードされた非ASCII文字が含まれていて、ロケールからにsté
変換する必要がある文字列など、UTF-8を文字マップとして使用する場合は、STÉ
次のようにします。
$ perl -C -pe 's/\b\w{2,3}\b/uc($&)/eg' file
CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
STÉ
答え3
awkの解決策は次のとおりです。
awk '{ for (i=1; i<=NF; i++) { if (length($i) <= 3) { $i=toupper($i) } } }1' infile
答え4
使用幸せ(以前のPerl_6)
raku -pe 's:g/<?wb> \w**2..3 <?wb>/{$/.uc}/;'
または
raku -pe 's:g/<|w> \w**2..3 <|w>/{$/.uc}/;'
または
raku -pe 's:g/<< \w**2..3 >>/{$/.uc}/;'
上記のRakuコードは、@terdonのPerlコードをかなり直接翻訳したものです。単語の境界はRaku<?wb>
で書かれています<|w>
。これはそれぞれ<!wb>
またはで否定できます<!|w>
。最後の例では、左の単語の境界は、<<
右の単語の境界はです>>
。 Rakuの一致変数はであり$/
、スペルも可能です$<>
。
ターゲットカテゴリをから\w
または<alpha>
(省略形)<alnum>
に変更することもできます。<:Letter>
<:L>
気づく: \w
アンダースコアと一致しますが、<alpha>
そうではありません。<alnum>
<:Letter>
<:L>
上記のクラスはすべてUnicodeをサポートしているため、どのような「大文字と小文字の区別」も問題になりません。 Unicodeで定義された<:Ll>
小文字および/またはUnicodeで定義された大文字をターゲットにした正規表現を作成し、<:Lu>
「.fc
foldcase」ルーチンを使用して文字を比較することもできます。
入力例:
cat Example
Dog
I
Fish
su
Su adm
Amd Cat ignore
sté
a
Xa
Xá
Xå
Xà
Xä
Xb
Xß
Xœ
Xþ
出力例:
CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
STÉ
a
XA
XÁ
XÅ
XÀ
XÄ
XB
XSS
XŒ
XÞ