値が"abcd.txt"
の変数があります。
".txt"
の前のすべてを2番目の変数に格納し、".txt"
を".log"
に置き換えたい
目的の値をエコーしても問題ありません。
a="abcd.txt"
echo $a | sed 's/.txt/.log/'
しかし、どのようにして値"abcd.log"
を2番目の変数に取得できますか?
コマンド置換 を次のように使用できます。
new_filename=$(echo "$a" | sed 's/.txt/.log/')
またはあまり推奨されていないバックティックの方法:
new_filename=`echo "$a" | sed 's/.txt/.log/'`
バックティックを使用して、コマンドの出力を変数に割り当てることができます。
logfile=`echo $a | sed 's/.txt/.log/'`
これは、Bashを使用していることを前提としています。
あるいは、この特定の問題に対して、Bashにはパターンマッチング構造自体があります。
stem=$(textfile%%.txt)
logfile=$(stem).log
または
logfile=$(textfile/%.txt/.log)
最後の例の%により、最後の.txtのみが置き換えられます。
最も簡単な方法は
logfile="${a/\.txt/\.log}"
$a
のファイル名に複数の.txt
が含まれることを許可する必要がある場合は、次の解決策を使用します。より安全です。 .txt
の最後の出現のみを変更します
logfile="${a%%\.txt}.log"
bash/kshがある場合
$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log