我需要在包含以下字符串的ascii文件中获得分数后面的数字:
iteration 32: score=0.126462
我想在bash中这样做。 所以输出应该是:
0.126462
我知道我必须使用正则表达式,但我不熟悉它,我无法在数小时后解决问题。 感谢
编辑:有些解决方案并不适合我,因为我并没有在某个变量中对字符串进行硬编码,而是在管道中传入。
cat kMeans.init-1.log |尾-2 |头-1 | CODE_SHOULD_GO_HERE
答案 0 :(得分:1)
您不必使用正则表达式,但如果必须:
string='iteration 32: score=0.126462'
if [[ $string =~ score=([[:digit:]]+\.[[:digit:]]+)$ ]]; then
number=${BASH_REMATCH[1]}
printf 'Found number: %s\n' "$number"
else
printf 'No number found.\n'
fi
没有正则表达式:
string='iteration 32: score=0.126462'
if [[ $string = *score=+([[:digit:]]).+([[:digit:]]) ]]; then
number=${string##*score=}
printf 'Found number: %s\n' "$number"
else
printf 'No number found.\n'
fi
答案 1 :(得分:1)
Pure bash solution。
$ [[ "iteration 32: score=0.126462" =~ score=([0-9.]+) ]] && echo ${BASH_REMATCH[1]}
0.126462
通过grep,
$ echo 'iteration 32: score=0.126462' | grep -oP 'score=\K[\d.]+'
0.126462
答案 2 :(得分:1)
试试这个:
grep -E -m 1 'score=([0-9.]+)' your_file
将仅返回第一个匹配0.126462
或尝试your_file | sed "s/\result=([0-9.]\+\)/\1/"