示例
./ 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仅接收中间数字,而不能同时接收两者?
答案 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