■ はじめに
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