シェルスクリプトによる文字列処理:該当文字列を削除をする
調べるにあたった経緯
業務でシェルを作成しました。
処理の一部として下記条件で作成しました。
- 引数として指定する値はフルパスで記述されたファイル名
- 引数を使用して二つの変数に格納する
* 一つはフルパスで入力されたファイル名
* もう一方はパスを抜いたファイル名のみ
今回は引数で指定した値のうちディレクトリを排除して変数に格納するために、
コマンドを使用せずシェルスクリプトで置換を行ったのでその処理についてまとめていきたいと思います
bash置換の書式について
引数例:
${FULLPASS}=/work/TEST/aaa.txt
ケース1:
${変数%マッチパターン}
後方からの検索の一致で一番初めにマッチした部分を削除
例:
${FILE}=${FULLPASS%aaa.txt} echo ${FILE} /work/TEST/
ケース2:
${変数%%マッチパターン}
後方からの検索の一致で一番後ろまでマッチした部分までを削除
${FILE}=${FULLPASS%/TEST/aaa.txt} echo ${FILE} /work
ケース3:
${変数#マッチパターン}
前方からの検索の一致で一番初めにマッチした部分を削除
${FILE}=${FULLPASS#/work/TESTaaa} echo ${FILE} /aaa.txt
ケース4:
${変数##マッチパターン}
前方からの検索の一致で一番後ろまでマッチした部分までを削除
${FILE}=${FULLPASS##/work} echo ${FILE} /TEST/aaa.txt
シェルで用いたスクリプト
上記を経て、自分があげた条件とマッチして、今回シェルで用いたスクリプトが以下となります。
${FILE}=${FULLPASS#/work/TESTaaa} echo ${FILE} /aaa.txt
最後に
今回初めて現場で作成したシェルがかなり大作だと思って、自分の成果物として宝物として残しておきたいと考えましたが、持ち出しができない制約に悔しい思いをしました、、、
参考
【Linux】シェルスクリプトによる文字列処理:置換や削除をする方法
https://eng-entrance.com/linux-shellscript-replacement