
こんにちは。チームでは、テーブル名が次のような状況にあります。
head_must_report
customer_report_sub_division
country_code_universe_nation_part
ただし、cutコマンドを使用すると、出力は次のようになります。注:テーブル名は下線で区切られています。
HMR
CRSD
CCUNP
Bashスクリプトの使用
答え1
Perlがない場合は、sed
以下を使用してくださいtr
。
> sed 's/\(.\)[^_]*_*/\1/g' /tmp/data | tr 'a-z' 'A-Z'
HMR
CRSD
CCUNP
答え2
perl -ple 's/(?:^|_)(.)[^_]*/\U$1/g'
このPerlコマンドは標準入力から行を読み取り、質問で述べた規則に従って変換します。s///
文字列の先頭または下線文字の直後に表示されるすべての文字を抽出し、大文字に置き換える置換コマンド()を使用してこれを行います。上記のバリエーションが一致します。どの(.)
ただし、小文字のみを一致するように変更して([a-z])
これを制限することもできます。
例:
$ echo yeah_seem_to_work | perl -ple 's/(?:^|_)(.)[^_]*/\U$1/g'
YSTW
答え3
perl
正規表現を使わずに:
perl -lne 'print map {/./;uc $&} split /_/' test
Gnu sed
使用\u
:
sed 's/_*\(.\)[^_]*/\u\1/g' test
Posix sed
:
sed 's/_*\(.\)[^_]*/\1/g;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test
Posix awk
(Gnu awk
、およびでmawk
テスト済みbusybox awk
):
awk -F_ -v OFS="" '{for(i=1; i<=NF; i++) $i = toupper(substr($i, 1, 1))}1' test
python
(2または3):
python -c '
import sys
print("".join([k[0].capitalize() for k in sys.argv[1].split("_")]))
' string
答え4
雪の結晶だから
regexp_replace(table_name, '\(.\)\([^_]*_*\)', '\\1')