Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

変数echoとsedのコンボはbashだけで完結できる / bashの文字列置換いろいろ(ときどきzsh)

GitHub Actionsのyamlファイルをいい感じに矯正してくれるActionlintというのを入れていたら、SC2001という項目を指摘された。

www.shellcheck.net

string="stirng" ; echo "$string" | sed -e "s/ir/ri/"というコードは、string="stirng" ; echo "${string//ir/ri}" というコードで置換できるらしい。へえ知らなかった。

というわけでbashのマニュアルを読んでみると、色々な置換系機能があることがわかったのでメモ。

tldp.org

↑あいかわらずそっけないbashのドキュメント

${#string}

文字列長が得られる。#だから長さだね、という感じ。割とよく見る。

${string:3}

切り出し系。3文字飛ばして読む。

これはzshでも動作する。ちなみにzshに限った話だけれど、数字じゃなくてaとかを書くと別の機能(Modifier)が起動して変数展開される。

zsh.sourceforge.io

% foo=tmp.txt
% echo ${foo:a}
/home/windymelt/tmp.txt

${string:3:4}

切り出し系。3文字飛ばして4文字分読む。要するにsubstring的なやつ。2つ目の数字は長さであってオフセットではないので注意。

${string#substring}

削除系。前からsubstringに最短マッチした箇所を削除する。#を2つにすると最長マッチに切り替わる。

${string%substring}

削除系。↑が後ろからのマッチになったバージョン。%を2つにすると最長マッチに切り替わる。

${string/substring/replacement}

置換系。先頭マッチだけを置換する。正規表現が使えるっぽい。

${string//substring/replacement}

置換系。全部のマッチを置換する。スラッシュが2つある。

${string/#substring/replacement}

置換系。先頭マッチと置換とのコンボ技。同様に/%とおくと末尾マッチになる。末尾マッチのほうが便利そう。

むすび

使わんだろこんなのと思うことのほうが多いのだけれど、そういうやつに限って使うので、まあ一回練習しておくと、あああのときあのブログで見たやつか・・・となってお得なので練習しましょう。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?