【问题标题】:How to read output of sed into a variable如何将 sed 的输出读入变量
【发布时间】:2011-04-30 04:03:05
【问题描述】:

我有一个值为"abcd.txt"的变量。

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

回显所需的值没有问题:

a="abcd.txt"

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

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

【问题讨论】:

    标签: shell variables sed


    【解决方案1】:

    最简单的方法是

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

    如果应该允许$a 中的文件名出现不止一次.txt,请使用以下解决方案。它更安全。它只会更改最后一次出现的.txt

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

    【讨论】:

      【解决方案2】:

      如果你有 Bash/ksh

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

      【讨论】:

      • 谢谢,但这对我没有任何帮助......我已经能够回应......问题是我想把它变成一个变量。
      【解决方案3】:

      您可以使用反引号将命令的输出分配给变量:

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

      假设您使用的是 Bash。

      另外,对于这个特殊问题,Bash 本身具有模式匹配结构:

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

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

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

      【讨论】:

      【解决方案4】:

      您可以将command substitution 用作:

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

      或不太推荐的反引号方式:

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

      【讨论】:

      • 甚至更好:new_filename="$(echo "$a" | sed 's/.txt/.log/')"(在 Bash 对中的 " " 内部命令替换仍然匹配)。
      • “不太推荐”?也许对于 bash,但没有指定 shell,所以它可能是唯一的选择 :-)
      猜你喜欢
      • 2014-05-05
      • 2010-10-30
      • 2012-02-15
      • 2011-10-08
      • 2018-07-16
      • 2023-04-08
      • 2019-03-10
      • 2019-01-31
      相关资源
      最近更新 更多