如何将sed的输出读入变量

时间:2010-10-25 11:25:12

标签: shell variables sed

我的变量值"abcd.txt"

我想将".txt"之前的所有内容存储在第二个变量中,将".txt"替换为".log"

我没有回应所需值的问题:

a="abcd.txt"

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

但是如何将值"abcd.log"放入第二个变量?

4 个答案:

答案 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"