shell输入中的替换子字符串

时间:2015-04-18 23:58:43

标签: bash shell

我在终端中输入了一组字符串作为输入。我需要使用 shell ".awk"子字符串替换为每个字符串中的".sh",然后输出修改后的字符串。 我写了这样的脚本:

#!/bin/bash

while read line
do
  result=${line/.awk/.sh}
  echo $result
done

但它给了我一个错误:script-ch.sh: 6: script-ch.sh: Bad substitution

如何更改此简单脚本以修复错误?

UPD: ".awk"可能在字符串中。例如:"file.awk.old"

2 个答案:

答案 0 :(得分:3)

如果您使用Bash,那么您的替换没有任何问题。当bash substring replacement 被定制为完成这项工作时,没有理由产生额外的子shell并使用单独的实用程序:

$ fn="myfile.awk.old"; echo "$fn  -->  ${fn/.awk/.sh}"
myfile.awk.old  -->  myfile.sh.old

注意:如果您将.sh替换为.awk,则.是不必要的。一个简单的${fn/awk/sh}就足够了。

我怀疑你的原始剧本中有一些混乱的DOS字符。

答案 1 :(得分:2)

不确定为什么它适合你而不适合我..可能是你给它的输入。它可能有一个空间。

这应该有效:

#!/bin/bash

while read line
do
  result=$(echo $line | sed 's/\.awk/\.sh/')
  echo $result
done