Rog*_*ore 43 variables shell sed
我有变量有价值"abcd.txt".
我想之前存储的一切".txt"在第二个变量,取代了".txt"用".log"
我没有回应所需值的问题:
a="abcd.txt"
echo $a | sed 's/.txt/.log/'
Run Code Online (Sandbox Code Playgroud)
但是如何将值"abcd.log"输入第二个变量?
cod*_*ict 73
您可以使用命令替换:
new_filename=$(echo "$a" | sed 's/.txt/.log/')
Run Code Online (Sandbox Code Playgroud)
或者较少推荐的反推方式:
new_filename=`echo "$a" | sed 's/.txt/.log/'`
Run Code Online (Sandbox Code Playgroud)
Cam*_*ner 15
您可以使用反引号将命令的输出分配给变量:
logfile=`echo $a | sed 's/.txt/.log/'`
Run Code Online (Sandbox Code Playgroud)
假设你正在使用Bash.
或者,对于这个特殊问题,Bash有自己的模式匹配结构:
stem=$(textfile%%.txt)
logfile=$(stem).log
Run Code Online (Sandbox Code Playgroud)
要么
logfile=$(textfile/%.txt/.log)
Run Code Online (Sandbox Code Playgroud)
最后一个示例中的%将确保仅替换最后一个.txt.
小智 5
最简单的方法是
logfile="${a/\.txt/\.log}"
Run Code Online (Sandbox Code Playgroud)
如果应该允许文件名中$a出现多次.txt,请使用以下解决方案。它更安全。它只改变最后一次出现的.txt
logfile="${a%%\.txt}.log"
Run Code Online (Sandbox Code Playgroud)