いいものをつくろう

CTOの日記

bash

bashでのregexを駆使している技を盗みましょう

投稿日:

これをするのに私はスクリプトでファンクションを書いていましたが

それをそれぞれ一行でやってのけている人で出会うことがあります。

そこをチマチマ実装して実装とデバッグの時間使っちゃってたなー

と思うことが

最近あったのでメモをしておきます

 

まずはどういうことかコードを見てみましょう

この辺のsedなどが使いこなせる、感はエンジニアとしては非常に役にたつ知識でしょう。

次、これ使いましょう

git clone --depth=1 --branch master xxxxx.git
 
git rev-parse HEAD
 
export MISO_DIR=${MISO_DIR:-${DEFAULT_HOME}/test}
 
 
NAME_WO_EXT=$(echo "$SCRIPT_NAME" | cut -f 1 -d '.')
 
 
yesterday=$(date --date '--60 hours' +%Y-%m-%d)
 
yesterday_arbitrary_format=$(date --date '--36 hours' '+yyyy=%Y/MM=%m/day_of_month=%d')
one_liner_regex=$(sed -e 's:.*/yyyy=\([0-9]\+\)/MM=\([0-9]\+\)/day_of_month=\([0-9]\+\):\1-\2-\3:' a_file.txt)


 

たくさん

普段私が使わない技が詰まっています。

git clone with option や git rev-parse HEADってなんや

とか

cutしてたらり bash変数のdefault置き換え

date関数の呼び出しもエレガントだし

一番驚いたのは、

$(date --date '--36 hours' '+yyyy=%Y/MM=%m/day_of_month=%d')

こういう柔軟さね

あとは

これね

sedをちゃんと理解してる っていうか 正規表現がちゃんとわかってるっていうか

よくある yyyy=2019/MM=09/day_of_month=03のようなフォルダパスから sedでうまく抽出してんじゃん

one_liner_regex=$(sed -e 's:.*/yyyy=\([0-9]\+\)/MM=\([0-9]\+\)/dd=\([0-9]\+\):\1-\2-\3:' a_file.txt)

 

あと

set -e

set +e

なんか初めてみましたけど!

どうやら 状態の解除らしいです https://journal.lampetty.net/entry/wp/444

 

良い技は盗み、be lazy, be good programmer

以上です

-bash

Copyright© CTOの日記 , 2020 All Rights Reserved.