Вытащить одну строку из строки --bash - PullRequest
1 голос
/ 07 марта 2019

Пример

. / 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 Ответ

1 голос
/ 07 марта 2019

Это потому, что grep -o '[0-9]' возвращает все цифры в отдельных строках.

больно было бы cat test.txt | grep -o [0-9] | head -1 > num1.txt

Но не делайте этого: вы делаете way слишком много файлового ввода-вывода. Используйте регулярное выражение в bash:

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

Убедитесь, что вы используете #!/bin/bash в качестве линии Шебанга.


$ set -- R19
$ if [[ $1 =~ ^([A-Z])([0-9])([0-9])$ ]]; then
>     printf "%s00%d00%d\n" "${BASH_REMATCH[@]:1}"
> fi
R001009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...