sed - 3番目の単語をすべて大文字で表記する方法は?

sed - 3番目の単語をすべて大文字で表記する方法は?

一方:

main_east_library
main_west_roof
main_north_roof
minor_south_roof

sed(具体的にはnotなど)awkを使用してtr以下を生成するにはどうすればよいですか?

main_east_Library
main_west_Roof
main_north_Roof
minor_south_Roof

それは次のとおりです。

$ echo "main_west_library
main_west_roof
main_north_roof
minor_south_roof" | sed 's_\3_upcase(\3)_' 

これが提供している間:

sed: -e expression #1, char 16: Invalid back reference

ベストアンサー1

GNUの使用sed:

sed -E 's/[[:alpha:]]+/\u&/3'

各行の 3 番目の文字シーケンスを大文字で表示します。

首都すべて各行の3番目の文字の順序:

sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'

3文字の順序をすべて大文字で表記してください。入力を通して、GNUを使用するawk

awk -v RS='[^[:alpha:]]+' -v ORS= '
   NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
   {print $0 RT}'

または以下を使用してperl

perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'

Perlの文字クラスはUnicode文字属性に基づいていますが、[[:alpha:]]一部のシステムでは文字クラスが多少ランダムになることがあります(たとえば、GNUシステムでは多くの数字を含みますが、アラビア数字(0123456789)は含まれません)。\p{...}したがって、これには\p{alpha}アルファベットのすべての文字、アルファベットではなくアルファベット文字も含まれます。

発音区別符号結合は含まれないが、類似の単語が2Stéphaneつの別々の単語として扱われるという意味である。

したがって、次のことができます。

perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'

しかし、これはあまりにも多くのコンテンツを含めることができます。

また、GNUとは異なり、Perlは(where is 1ハイフン文字)などの単語を(2文字と)にsed正しく変換します。\ufiddleFiddleFi

おすすめ記事