Я пытаюсь извлечь информацию из отказов файлов ovpn, чтобы обновить мой список серверов.Я нахожу способ извлечь информацию с помощью sed, и все работает, но я застреваю, когда пытаюсь извлечь данные для создания структуры каталогов.
У меня есть файлы внутри папки, например:
ch101.tcp443.ovpn
ch101.udp1194.ovpn
ch102.nordvpn.com.tcp443.ovpn
ch102.nordvpn.com.udp1194.ovpn
ch102.tcp443.ovpn
ch102.udp1194.ovpn
Теперь я хочу извлечь информацию для создания структуры каталогов, поэтому Я сделал регулярное выражение , чтобы извлечь всю необходимую мне информацию
Это работает со всеми имеющимися у меня файламии получает данные из имени файла.Таким образом, из "ch101.udp1194.ovpn" он извлекает "ch101" и "udp" в группы 1 и 2.
Но когда я пытаюсь заставить его работать с sed, у меня не получается.Я пытался разбить его на этапы, но даже когда только 1-я группа искала «ch101», он не работает:
echo 'ch101.udp1194.ovpn' | sed -rn 's/^([a-z\-]+\d{1,4})/\1/p'
Что я пропустил?Я не эксперт по sed, но я нахожу подобное выражение, которое работает, но это не так.
Моя последняя цель - создать каталог и хранить в нем всю необходимую информацию, поэтому:
for i in /opt/ovpn/*.ovpn ; do
[ -f "$i" ] || continue
FIRST_ARG=$(echo $i | sed ...) # extract ch101
SECOND_ARG=$(echo $i | sed ...) # extract udp
FIRST_ARG_TEXT=$(echo $FIRST_ARG | sed ...) # extract text from FIRST_ARG
FIRST_ARG_NUM=$(echo $FIRST_ARG | sed ...) # extract num from FIRST_ARG
FIRST_ARG_NUM_4FORMAT=$(printf '%04i\n' $FIRST_ARG_NUM) # 4 digits for FIRST_ARG_NUM
mkdir /opt/somedir/$FIRST_ARG_TEXT$FIRST_ARG_NUM_4FORMAT$SECOND_ARG
cp ........
done
Итак, из ch101.udp1194.ovpn я закончу каталогом с именем
ch0101udp
Может быть, это не самый лучший и чистый способ, но мне кажется простым и максимальным, что мои знания могутдостичь
Любая идея или вопрос хорош для меня
Ps.Я нахожусь под busybox 1.30, так что это должно быть sh не bash