変数の置換

変数の置換

返された文字列に変数が割り当てられています。

ytd_wk=$(cat file.csv | grep $(date +'%Y') | tail -1)

最後の2文字を部分文字列で囲みたいです。

ytd_wk=${ytd_wk:(-2)}

1行でこれを達成する方法はありますか?以下を試しましたが、bad substitutionエラーが発生しました。

ytd_wk=${$(cat file.csv | grep $(date +'%Y') | tail -1):(-2)}

ベストアンサー1

以下を試してください。

grep "$(date +'%Y')" file.csv | tail -1 | sed 's/.*\(..$\)/\1/'

他のプログラムの出力や一部のファイルからデータを取得できるため、cat必要はありません。grep最後の方法は、1つのコマンドのみを使用し、より速く、システムリソースを消費しにくく、より効率的です。

完璧なソリューション:

ytd_wk=$(grep "$(date +'%Y')" file.csv | tail -1 | sed 's/.*\(..$\)/\1/')

tailGNU省略を使用できますsed '$!d'

grep "$(date +'%Y')" file.csv | sed -r '$!d;s/.*(..$)/\1/'

POSIX:

grep "$(date +'%Y')" file.csv | sed -e '$!d' -e 's/.*\(..$\)/\1/'

おすすめ記事