web-dev-qa-db-ja.com

sedの出力を変数に読み込む方法

値が"abcd.txt"の変数があります。

".txt"の前のすべてを2番目の変数に格納し、".txt"".log"に置き換えたい

目的の値をエコーし​​ても問題ありません。

a="abcd.txt"

echo $a | sed 's/.txt/.log/'

しかし、どのようにして値"abcd.log"を2番目の変数に取得できますか?

39
Roger Moore

コマンド置換 を次のように使用できます。

new_filename=$(echo "$a" | sed 's/.txt/.log/')

またはあまり推奨されていないバックティックの方法:

new_filename=`echo "$a" | sed 's/.txt/.log/'`
69
codaddict

バックティックを使用して、コマンドの出力を変数に割り当てることができます。

logfile=`echo $a | sed 's/.txt/.log/'`

これは、Bashを使用していることを前提としています。

あるいは、この特定の問題に対して、Bashにはパターンマッチング構造自体があります。

stem=$(textfile%%.txt)
logfile=$(stem).log

または

logfile=$(textfile/%.txt/.log)

最後の例の%により、最後の.txtのみが置き換えられます。

14
Cameron Skinner

最も簡単な方法は

logfile="${a/\.txt/\.log}"

$aのファイル名に複数の.txtが含まれることを許可する必要がある場合は、次の解決策を使用します。より安全です。 .txtの最後の出現のみを変更します

logfile="${a%%\.txt}.log"
4
ikke dus

bash/kshがある場合

$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log
3
ghostdog74