我的变量值"abcd.txt"
。
我想将".txt"
之前的所有内容存储在第二个变量中,将".txt"
替换为".log"
我没有回应所需值的问题:
a="abcd.txt"
echo $a | sed 's/.txt/.log/'
但是如何将值"abcd.log"
放入第二个变量?
答案 0 :(得分:66)
您可以将command substitution用作:
new_filename=$(echo "$a" | sed 's/.txt/.log/')
或推荐的反推方式:
new_filename=`echo "$a" | sed 's/.txt/.log/'`
答案 1 :(得分:14)
您可以使用反引号将命令的输出分配给变量:
logfile=`echo $a | sed 's/.txt/.log/'`
假设你正在使用Bash。
或者,对于这个特殊问题,Bash本身就有模式匹配结构:
stem=$(textfile%%.txt)
logfile=$(stem).log
或
logfile=$(textfile/%.txt/.log)
最后一个示例中的%将确保仅替换最后一个.txt。
答案 2 :(得分:3)
如果你有Bash / ksh
$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log
答案 3 :(得分:3)
最简单的方法是
logfile="${a/\.txt/\.log}"
如果允许$a
中的文件名中出现多个.txt
,请使用以下解决方案。它更安全。它只会更改.txt
logfile="${a%%\.txt}.log"