sedで文字列の各キャラクタを大文字・小文字・数字・記号ごとに異なる文字列に置き換える

ちょっとした処理で、特定の大文字・小文字・数字・記号ごとに、それぞれを違う文字列(大文字=?u、小文字=?l、数字=?d、記号=?s)に置換したいことがあったので、備忘で残しておく。
以下のように、xargsで1文字づつ渡してやり、最初の記号だけ他の置換で被らない文字列(??)に置換してやり、最後にそれを?sに置換することで対応している。

echo 'StrIng$123!' | xargs -d. -n1 -I@ bash -c "printf '@' | sed -e 's/[[:punct:]]/??/g;s/[[:lower:]]/?l/g;s/[[:upper:]]/?u/g;s/[[:digit:]]/?d/g;s/??/?s/g;'"
Sponsored Links

blacknon@BS-PUB-UBUNTU-01:~$ echo 'StrIng$123!' | xargs -d. -n1 -I@ bash -c "printf '@' | sed -e 's/[[:punct:]]/??/g;s/[[:lower:]]/?l/g;s/[[:upper:]]/?u/g;s/[[:digit:]]/?d/g;s/??/?s/g;'"
?u?l?l?u?l?l?s?d?d?d?s

 

ちゃちゃっと処理するのであれば、まぁこんな感じでやってしまうのが早いかも。
ちゃんと処理速度を求めるようなものであれば、Pythonなりで書いたほうが良さそう。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*