Diary

Diary

日々学んだことをアウトプットする場として初めてみました

trコマンドで文字数の異なる場合の挙動

置換コマンド編

tr

  • tr a bでaをbに置換する
echo pien | tr ie ao
> paon

a,b の文字数が異なる場合

echo あほう | tr 'あほ' 'い'
> いいう
echo あほう | tr 'あほ' 'いおま'
> いおま
echo pien | tr 'i' 'ao'
> paen

どうやら一文字目(a)の指定文字数だけが変更を受けるらしい

manみても解決策わからなかった...

解決策

大人しくsedを使う

sed

  • 同じく置換コマンド(正しくはプログラム)
  • 色々な使い方があるが、置換に使いたければ
    • sed 's;A;B;'
    • A to B
    • 区切りもじ「;」は何でも良い(正規表現などとバッティングしなければ)
echo あほう | sed 's@あほ@いおま@'
> いおまう
echo pien | sed 's#i#en#'
> penen

tr はいらない?

trは-d(delete)-c(complement)とか合わせて使うと強そう。

echo '0120-117-117' | tr -d -
> 0120117117
echo 'kokoha!DOKO?WatashiHa*Dare' | tr -c 'a-zA-Z' ' '
> kokoha DOKO WatashiHa Dare
  • sedでもできるが、trの方が記述が簡単
    • trの方がおそらく軽い