我正在尝试编写执行以下操作的脚本:
我完成了提取部分。
Changer
但NUM会是这样的:
NUM=echo $String | grep -o "[0-9]\+"
我尝试5
3
\n
和${NUM[0]}
只是为了得到第一个值,但它没有效果。
有什么建议吗?
答案 0 :(得分:0)
您分配给NUM
的方式不正确。
您帖子中的grep
模式也是如此。
写得像这样:
input='There are 5 apples and 3 oranges'
nums=($(grep -Eo '[0-9]+' <<< "$input"))
${nums[0]}
将包含第一个数字,${nums[1]}
第二个,依此类推。
如果输入来自命令:
nums=($(cmd | grep -Eo '[0-9]+'))
答案 1 :(得分:0)
我会使用流程替换和mapfile
执行此操作:
$ mapfile -t nums < <(grep -Eo '[[:digit:]]+' <<< 'There are 5 apples and 3 oranges')
$ declare -p nums
declare -a nums='([0]="5" [1]="3")'
这确保只有换行符分隔数组元素。在这种情况下,这不是问题,因为搜索项是数字序列,但它是一种适用于任何模式的强大方法。
请注意mapfile
需要Bash 4.0或更新版本。
答案 2 :(得分:0)
GNU awk
:
gawk '{if($1>$2){print $1">"$2}else if($1<$2){print $1"<"$2} else {print $1"="$2}}' FPAT='[0-9]+' <<<'There are 5 apples and 8 oranges'
FPAT的值应该是一个提供常规字符串的字符串 表达。这个正则表达式描述了每个的内容 字段。
答案 3 :(得分:0)
使用GNU awk for FPAT:
$ echo 'There are 5 apples and 3 oranges' |
awk -v FPAT='[0-9]+' '{print ($1 > $2 ? "greater" : "lesser")}'
greater
$ echo 'There are 2 apples and 3 oranges' |
awk -v FPAT='[0-9]+' '{print ($1 > $2 ? "greater" : "lesser")}'
lesser