awkまたはsedを使用して、すべての小さな単語(2〜3文字)を大文字に変換します。

awkまたはsedを使用して、すべての小さな単語(2〜3文字)を大文字に変換します。

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>.fcfoldcase」ルーチンを使用して文字を比較することもできます。

入力例:

cat Example
Dog
I
Fish
su
Su adm
Amd Cat ignore
sté
a
Xa
Xb

出力例:

CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
STÉ
a
XA
XB
XSS

https://docs.raku.org/言語/regexes#Anchors
https://raku.org

関連情報