Разделение строк на переменные a, b, c, d
является прямой передачей с использованием bash расширение параметра с удалением подстроки. Расширения параметров ${var#pattern}
обрезаются слева, хотя 1-е вхождение pattern
, ${var##pattern}
обрезается слева до последнего вхождения pattern
. Расширение с использованием %
и %%
работает так же справа.
Если использовать это в коротком сценарии для разделения всех имен в вашем файле, вы получите:
#!/bin/bash
while read -r d || [ -n "$d" ]; do
a="${d%%_*}" ## trim from right though leftmost "_"
b="${d%-*}" ## trim from right through rightmost "-"
b="${b#*_}" ## trim from left through leftmost "_"
c="${d%.*}" ## trim from right through rightmost "."
c="${c##*-}" ## trim from left trough rightmost "-"
printf "\na: %s\nb: %s\nc: %s\nd: %s\n" "$a" "$b" "$c" "$d"
done < "$1"
Пример использования / вывода
С вашими .xml
именами файлов в файле names
вы получите:
$ bash splitnames.sh names
a: a
b: test_1
c: aws
d: a_test_1-aws.xml
a: b
b: test_2
c: aws
d: b_test_2-aws.xml
a: a
b: stage_3
c: az
d: a_stage_3-az.xml
a: c
b: prod_1
c: az
d: c_prod_1-az.xml
После того, как вы отделите части файл, вместо того, чтобы соединять их вместе с bash, вам лучше обслужить утилиту, которая .json
знает и может проверить результат. jq
- это инструмент, который широко используется.