【Shell】シェル ~ 文字列置換 ~

■ はじめに

bashによる文字列置換をメモ。

【1】bashによる文字列置換

パースには、
以下の関連記事で扱った sedコマンドなど
ではない方法「bashによる文字列置換」を使っている

awkコマンド
https://dk521123.hatenablog.com/entry/2019/11/22/223043
sedコマンド
https://dk521123.hatenablog.com/entry/2019/11/23/101625

1)前方一致(文字列削除)

* 変数に代入された文字列から、後方一致でマッチしたパターン部分を削除

[1] ${変数名#パターン}
[2] ${変数名##パターン}

[1] ${変数#マッチパターン}

 * 前方からの検索の一致で一番初めにマッチした部分を削除

[2] ${変数##マッチパターン}

 * 前方からの検索の一致で一番後ろまでマッチした部分までを削除

2)後方一致(文字列削除) 

* 変数に代入された文字列から、後方一致でマッチしたパターン部分を削除

[1] ${変数名%パターン}
[2] ${変数名%%パターン}

[1] ${変数%マッチパターン}

 * 後方からの検索の一致で一番初めにマッチした部分を削除

[2] ${変数%%マッチパターン}

 * 後方からの検索の一致で一番後ろまでマッチした部分までを削除

3)文字列置換

* 一番初めにマッチした部分だけを置換する部分置換と全置換の2種類

[1] ${変数名/パターン/置換}
[2] ${変数名//パターン/置換}

[1] ${変数/文字列/処理後文字列}

 * 最初にマッチしたもののみ文字列を置換

[2] ${変数//文字列/処理後文字列}

 * 全ての文字列を置換
 => サンプルの例1を参照

【2】サンプル

例1:「export 」を空文字で置換して、除去する

#!/bin/bash

target="export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE;export AWS_SECRET_ACCESS_KEY=ASIAIOSFODNN7EXAMPLE;export AWS_SESSION_TOKEN=AQoDYXdzEJr...PxRfiCYEXAMPLEKEY"

# AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE;AWS_SECRET_ACCESS_KEY=ASIAIOSFODNN7EXAMPLE;AWS_SESSION_TOKEN=AQoDYXdzEJr...PxRfiCYEXAMPLEKEY
target_without_export=${target//export /}

補足:コマンドで同じことをやるには

# echo "export A..." | sed "s/export //g"
echo "export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE;export AWS_SECRET_ACCESS_KEY=ASIAIOSFODNN7EXAMPLE;export AWS_SESSION_TOKEN=AQoDYXdzEJr...PxRfiCYEXAMPLEKEY" | sed "s/export //g"
# AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE;AWS_SECRET_ACCESS_KEY=ASIAIOSFODNN7EXAMPLE;AWS_SESSION_TOKEN=AQoDYXdzEJr...PxRfiCYEXAMPLEKEY

# sedコマンドについては、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2019/11/23/101625

関連記事

シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
JDBCシェルスクリプトでパースする
https://dk521123.hatenablog.com/entry/2020/03/24/223323
シェル ~ 文字列抽出あれこれ ~
https://dk521123.hatenablog.com/entry/2021/08/03/160901
シェルで split するには
https://dk521123.hatenablog.com/entry/2021/09/02/000000
awkコマンド
https://dk521123.hatenablog.com/entry/2019/11/22/223043
sedコマンド
https://dk521123.hatenablog.com/entry/2019/11/23/101625
シェルでのファイルに関する処理あれこれ
https://dk521123.hatenablog.com/entry/2020/09/28/000000