如何在shell脚本中搜索字符串并将其放入变量中?

如何在shell脚本中搜索字符串并将其放入变量中?,shell,sed,grep,Shell,Sed,Grep,只是想知道是否有人能帮我。我有一个文件,其中包含一行: W32i APP - 8.0.0.xxxxx shp 6SFE25~1.EXE xxxxx是5位数字,每次数字都不同。我希望能够搜索xxxxx并将其放入变量中,以便使用此变量。我是否使用grep和sed?a.txt #!/bin/sh read < a.txt [[ $REPLY =~ 8.0.0.([^\ ]*) ]] echo ${BASH_REMATCH[1]} 代码 num=$(

只是想知道是否有人能帮我。我有一个文件,其中包含一行:

W32i   APP   -     8.0.0.xxxxx shp 6SFE25~1.EXE
xxxxx是5位数字,每次数字都不同。我希望能够搜索xxxxx并将其放入变量中,以便使用此变量。我是否使用grep和sed?

a.txt

#!/bin/sh

read < a.txt
[[ $REPLY =~ 8.0.0.([^\ ]*) ]]
echo ${BASH_REMATCH[1]}
代码

num=$(
输出 xxxxx

您将很高兴花时间了解变量修饰符(如
${num#xxx}、${num##xx}、${num%x}、${num%%x}
的工作方式)之间的差异。高级shell还支持类似替换的
sed
${num/0/9}
${num//0/9}

IHTH


经过测试

它可以工作!这条评论真的帮助我学习,非常感谢!:)要查看
%%
%%
修饰符之间的差异,此代码是一个很好的示例,即仅使用
%%
会导致
xxxxx shp
,因为删除从右侧开始,找到第一个“”,然后删除到最后。使用
%%
,删除从右侧开始,然后查找所有“”(移到右侧),然后删除右侧的所有内容,只留下
xxxxx
。祝大家好运。我正要问你们区别,你们刚刚解释了!非常感谢你的详细解释。这对像我这样的新手来说是一个很大的帮助:)xxx
xxxxx
W32i   APP   -     8.0.0.xxxxx shp 6SFE25~1.EXE
 num=$(< a.txt)
 num=${num#*.0.0.}  # "left" remove everything up to .0.0.
 num=${num%% *}     # "right" remove "all" after " " char
 echo "num=${num}"
perl -lne 'm/(\d{5})/g;print $1'