このエントリーをはてなブックマークに追加


シェルスクリプトで文字列操作のleft, rightを作ってみた

左から何文字のleft, 右から何文字のrigth関数を作ってみました。
VisualBasicやVBAなどのLEFT, RIGHT関数と同様な動作になります。

尚、動作確認はUbuntu10.04で行いました。シェルはbashを利用しています。


left, rightのサンプルスクリプト

本シェルスクリプトを利用して直接的および間接的障害が生じても一切責任を負いません。
自己責任のもとで本スクリプトをご利用ください。

ダウンロード:fileleft_right.sh

#!/bin/bash

#------------------------------
# isnum $1
#------------------------------
function isnum {
  if [ $# -ne 1 ]; then
    echo "[ERROR] isnum : invalid argument" 1>&2 # output stderr
    return 1
  fi
  echo $1 | egrep '^[0-9]+$' > /dev/null 2>&1
  if [ $? -eq 0 ]; then
    return 0
  fi
  return 1
}

#------------------------------
# left string length
#------------------------------
function left {
  # $1 : string
  # $2 : length
  if [ $# -ne 2 ]; then
    echo "[ERROR] left $* : invalid argument" 1>&2 # output stderr
    return 1
  else
    isnum $2
    if [ $? -ne 0 ]; then
      echo "[ERROR] left $* : invalid argument" 1>&2 # output stderr
      return 1
    fi
    if [ `expr length $1` -le $2 ]; then
      echo $1
      return 0 
    fi
    expr substr $1 1 $2
    return 0
  fi
}

#------------------------------
# right string length
#------------------------------
function rigth {
  # $1 : string
  # $2 : length
  if [ $# -ne 2 ]; then
    echo "[ERROR] right $* : invalid argument" 1>&2 # output stderr
    return 1
  else
    isnum $2
    if [ $? -ne 0 ]; then
      echo "[ERROR] right $* : invalid argument" 1>&2 # output stderr
      return 1
    fi
    if [ `expr length $1` -le $2 ]; then
      echo $1
      return 0 
    fi
    l=`expr length $1`
    p=`expr $l - $2 + 1`
    expr substr $1 $p $2
    return 0
  fi
}

#------------------------------
# TEST
#------------------------------
left HelloWorld 5
rigth HelloWorld 5

上記のスクリプトでは、以下の関数を定義しています。

function説明
isnum数値かどうかをチェックする(負の値はサポートしていません)
egrepを利用して正規表現で数値かどうかをチェックしています。
left文字列と抽出する文字数を指定すると左から指定した抽出文字数分取得します。
right文字列と抽出する文字数を指定すると右から指定した抽出文字数分取得します。

実行結果

TESTとコメントしてある部分にleft, rigth関数を呼び出す例を記述してあります。

#------------------------------
# TEST
#------------------------------
left HelloWorld 5
rigth HelloWorld 5
  • 実行結果
    sakura@ubuntu:~$ chmod +x left_right.sh 
    sakura@ubuntu:~$ ./left_right.sh 
    Hello
    World


添付ファイル: fileleft_right.sh 456件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:04