Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何将sed的输出读入变量_Shell_Variables_Sed - Fatal编程技术网

Shell 如何将sed的输出读入变量

Shell 如何将sed的输出读入变量,shell,variables,sed,Shell,Variables,Sed,我有一个变量,它的值是“abcd.txt” 我想将“.txt”之前的所有内容存储在第二个变量中,将“.txt”替换为“.log” 我没有问题回显所需的值: a="abcd.txt" echo $a | sed 's/.txt/.log/' 但是如何将值“abcd.log”输入到第二个变量中?可以用作: 或不太推荐的反勾选方式: new_filename=`echo "$a" | sed 's/.txt/.log/'` 可以使用反勾号将命令的输出指定给变量: logfile=`echo $a

我有一个变量,它的值是
“abcd.txt”

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

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

a="abcd.txt"

echo $a | sed 's/.txt/.log/'
但是如何将值
“abcd.log”
输入到第二个变量中?

可以用作:

或不太推荐的反勾选方式:

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

可以使用反勾号将命令的输出指定给变量:

logfile=`echo $a | sed 's/.txt/.log/'`
假设您使用的是Bash

或者,对于这个特定问题,Bash本身有模式匹配结构:

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

上一个示例中的%将确保仅替换last.txt。

如果您有Bash/ksh

$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log
最简单的方法是

logfile="${a/\.txt/\.log}"
如果允许
$a
中的文件名有多个
.txt
出现,请使用以下解决方案。这样更安全。它只更改上次出现的
.txt

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

更妙的是:
new_filename=“$(echo“$a”| sed's/.txt/.log/”)“
(在
内部命令替换的Bash对中仍然匹配)。“不太推荐”?可能是bash,但shell尚未指定,因此它可能是唯一的选项:-)谢谢,但这并不能让我有任何进展。。。我已经能够回显了…问题是我想把它放到一个变量中。据我所知,应该使用Bash命令替换,而不是反勾号。也看到了,朋友们。
logfile="${a/\.txt/\.log}"
logfile="${a%%\.txt}.log"