sed命令不接受带有'。'的子字符串在ksh

时间:2017-04-25 16:19:52

标签: linux sed ksh

我正在编写一个ksh脚本,它将包含@sys子字符串的路径变量处理为相应的操作系统名称:

如果build_type是64位版本,我们需要在.64的末尾添加osver

e.g。如果opsys=amd64_linux26_rh5(红帽企业Linux 5)和build_type=dbg64osver应为amd64_linux26_rh5.64

现在,我想将@sys变量中的file_path替换为相应的操作系统版本作为子字符串,即amd64_linux26_rh5.64

但看起来sed忽略了。不知何故,唯一的amd64_linux26_rh5正在取代@sys省略.64部分。

#!/bin/ksh
file_path="/xxx/xxx/xxx/@sys/xxx"
sys="@sys"
bld_type="dbg64"
opsys="amd64_linux26_rh5"
bitver=".64"
if [[ ${bld_type} = @(*64) ]]
then
    osver="${opsys}${bitver}"
fi
echo "osver: $osver"
echo "old file_path is : $file_path"
file_path=$(echo "$file_path" | sed "s/$sys/${osver}/")
echo "new file_path is : $file_path"

相应的输出:

osver: amd64_linux26_rh5.64
old file_path is : /xxx/xxx/xxx/amd64_linux26_rh5/xxx
new file_path is : /xxx/xxx/xxx/amd64_linux26_rh5/xxx

我们正在尝试将file_path更改为/xxx/xxx/xxx/amd64_linux26_rh5.64/xxx。在这种情况下,请建议使用sed的适当方式。

1 个答案:

答案 0 :(得分:2)

输出显示时

old file_path is : /xxx/xxx/xxx/amd64_linux26_rh5/xxx

然后在复制粘贴代码时出现了问题 在您的代码中,file_path设置为

file_path="/xxx/xxx/xxx/@sys/xxx"

并且在echo之前永远不会更改。所以你的代码似乎与你展示的不同。

后开始
 echo "old file_path is : $file_path"

输出是有意义的。
在你的sed命令中

file_path=$(echo "$file_path" | sed "s/$sys/${osver}/")

sed在字符串@sys中找不到/xxx/xxx/xxx/amd64_linux26_rh5/xxxold_string保持不变。