一方:
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
正しく変換します。\u
fiddle
fi
Fiddle
F
i