从字符串--bash中提取一位数字

时间:2019-03-06 23:27:56

标签: regex bash parameters grep

示例

./ test.sh R19

echo "$1" > test.txt 
cat test.txt | grep -o ^[A-Z] > model.txt
cat test.txt | grep -o [0-9] > num1.txt
cat test.txt | grep -o [0-9]$ > num2.txt

echo "$(cat model.txt)00$(cat num1.txt)00$(cat num2.txt)"

我希望看到R001009,但是我得到的是

R001
9009

那么我该如何获取它,以便我的num1.txt仅接收中间数字,而不能同时接收两者?

1 个答案:

答案 0 :(得分:1)

这是因为grep -o '[0-9]'在单独的行中返回所有数字

痛苦的方式是cat test.txt | grep -o [0-9] | head -1 > num1.txt

但是不要那样做:您正在进行的文件I / O过多。在bash中使用正则表达式:

if [[ $1 =~ ^([A-Z])([0-9])([0-9])$ ]]; then
    printf "%s00%d00%d\n" "${BASH_REMATCH[@]:1}"
fi

确保您使用#!/bin/bash作为您的shebang行。


$ set -- R19
$ if [[ $1 =~ ^([A-Z])([0-9])([0-9])$ ]]; then
>     printf "%s00%d00%d\n" "${BASH_REMATCH[@]:1}"
> fi
R001009