我得到下面的错误,我的code.What是不是在它?我的目标是在$version中打印13.0.5.8
#!/bin/ksh
file="abc_def_APP_13.0.5.8"
if echo "$file" | grep -E "abc_def_APP"; then
echo "Version found: $file"
version1=(echo $file | awk -F_ '{print $NF}' | cut -d. -f1-3)
version2=(echo $file | awk -F_ '{print $NF}' | cut -d. -f4-)
echo $version1
echo $version2
version=$version$version2
echo $version
else
echo "Version not found"
fi请在下面找到错误:
./version.sh: line 7: syntax error near unexpected token `|'
./version.sh: line 7: ` version1=(echo $file | awk -F_ '{print $NF}' | cut -d. -f1-3)'
./version.sh: line 9: syntax error near unexpected token `|'
./version.sh: line 9: ` version2=(echo $file | awk -F_ '{print $NF}' | cut -d. -f4-)'
./version.sh: line 18: syntax error near unexpected token `else'发布于 2013-05-09 01:59:21
这一切都可以在一个awk命令中完成,而不需要额外的cut命令。考虑使用以下命令:
read version1 version2 < <(echo $file|awk -F "[_.]" '{
printf("%s.%s.%s ", $4, $5, $6); printf("%s", $7);
for (i=8; i<=NF; i++) printf(".%s", $i); print ""}')
echo "$version1 :: $version2"输出
13.0.5 :: 8发布于 2013-05-09 01:37:02
问题是您的反标记丢失了$,您需要像这样修复以下两行:
version1=$(echo $file | awk -F_ '{print $NF}' | cut -d. -f1-3)
version2=$(echo $file | awk -F_ '{print $NF}' | cut -d. -f4-)这将修复语法错误。下面这行没有多大意义,因为$version还没有初始化:
version=$version$version2你的意思是:
version="${version1}.${version2}"注意:您在grep中使用了-E选项,但没有使用任何扩展的正则表达式特性,实际上您正在进行固定字符串搜索,因此-F更合适。您可能还希望使用-q选项来抑制来自grep的输出。
就个人而言,我会这样做:
file="abc_def_APP_13.0.5.8"
echo "$file" | awk '/abc_def_APP/{print "Version found: "$0;
print $4,$5,$6;
print $7;
print $4,$5,$6,$7;
next}
{print "Version not found"}' FS='[_.]' OFS=.如果您只想要变量version中的版本号,为什么不简单地:
version=$(echo "$file" | grep -o '[0-9].*')发布于 2013-05-09 01:44:23
根本不需要awk。只需修剪最后一个下划线之前的每个字符,如下所示:
file="abc_def_APP_13.0.5.8"
version="${file##*_}"
echo "$version"有关此技术的文档,请参阅http://mywiki.wooledge.org/BashFAQ/073,或参阅bash自己的文档中的“参数扩展”。
单独处理最后一段也很简单:
file="abc_def_APP_13.0.5.8"
version="${file##*_}" # result: 13.0.5.8
version_end="${version##*.}" # result: 8
version_start="${version%.*}" # result: 13.0.5
echo "${version_start}/${version_end}" # result: 13.0.5/8因为这发生在bash内部,而不执行任何外部命令(比如awk),所以它的执行速度应该比其他给定的方法快得多。
https://stackoverflow.com/questions/16446579
复制相似问题