• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bashで変数の文字列を編集するにはどうすれば良いですか?)

bashで変数の文字列を編集する方法

このQ&Aのポイント
  • bashで変数の文字列を編集する方法について教えてください。
  • 指定の変数から文字列を編集する手順を知りたいです。
  • 変数の値から特定の文字列を取り出す方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

極端な話、bash以外のプログラムの助けを借りていいのなら、なんでもできます。 バッククオート``でコマンドを実行すればいいのですから。 Cなりなんなりで 指定日付の前日を表示するcalcDaysBeforeとかコマンドを作成して Test2='2010-03-01' Test2x=`calcDayBefere "${Test2}"` echo $Test2x とするとか。 GNUのdateだと、任意の日付を任意のフォーマットで出力できるので Test2='2010-03-01' Test2x=`date -d "${Test2} -1 days" +'%Y-%m-%d'` echo $Test2x とできます。他のdateコマンドでは使えません。

ngwave
質問者

お礼

>極端な話、bash以外のプログラムの助けを借りていいのなら、なんでもできます。 なるほど、つまりはこういう事ですか? 1.bashのプレーンな部分でできる事 2.linuxの環境を普通に作った範囲でbashから使用できる事 3.意図的に外部のアプリや開発アプリを組み込む事でできる事 を考えたとき、 1で出来ることは極限られているが、1~3で考えた時は、ほぼ何でもできる。 素人的には、1と2の境界線がよくわからないし、厳密に分かる必要もなく、 また、3は非常に敷居が高く、 1~2でできる事がbashでできる事という感覚です。 最初に紹介していただいたのが1~3でやる方法 後に紹介していただいたのが1~2でやる方法 でしょうか? 後者を試してみました。 うまく行きました。 これを元にTest1のパターンを試してみましたが、それもうまく行きました。 有り難うございます。 #!/bin/bash Test2='2010-03-01' Test2x=`date -d "${Test2} -1 days" +'%Y-%m-%d'` echo $Test2x Test1='2010-06-10' Test1x=`date -d "${Test1}" +'%Y%m'` echo $Test1x

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

このくらいであれば「bash だけ」で終わらせることも可能です. 例えば 1: Test1x=${Test1%-*} Test1x=${Test1x/-} 3: Test3x=${Test3##*/} で (たぶん) 終わり. 2 もその気になればできるけど,努力と根性が必要なのでやろうとは思わない. フルパスからファイル名を除いた部分だけ欲しいなら ${foo%/*} が簡単. これだと最後のスラッシュが消えるので, 必要なら追加してやってください.

ngwave
質問者

お礼

なるほど、有り難うございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

どのような入力に対してどのような値を得たいのか, きちんと書いてもらえませんか? もちろん想像はできるにしても, その想像があなたの思っているものと一致するという保証はないですよね. あと, bash の他に使っていいコマンドは何があるんでしょうか? 「bash だけ」と限定すると cut や tr なども使えなくなりますよ. 余談だけど, Test2 と Test3 (あるいは Test2x と Test3x) は逆.

ngwave
質問者

補足

>どのような入力に対してどのような値を得たいのか, きちんと書いてもらえませんか? 後は、文字列'2010-03-01'より、前日を求め、同じフォーマットの文字列で返すというのが残っています。

  • P-mann
  • ベストアンサー率62% (56/89)
回答No.1

Test2xはぱっと思いつかないけれど・・・。 Test1x=`echo ${Test1} | cut -d'-' -f1,2 | tr -d '-'` Test3x=`basename "${Test3}"`

ngwave
質問者

お礼

有り難うございます。 cutを使いこなせば、多くの言語にありがちなsubstrやspritのような事が出来そうですね。 trはreplace的な動きでしょうか。 basenameは便利なコマンドですね。 逆にpathだけ抜き出すコマンドは無いのでしょうか? 教えていただいたコマンドを調べました。 cutとbasenameは下記のサイトに載っていましたが、trは載っていませんでした。 http://www.k4.dion.ne.jp/~mms/unix/linux_com/index.html コマンドを網羅できているWEBサイトがあれば教えてください。

関連するQ&A

専門家に質問してみよう