Bash получить текст между 5-м и 6-м подчеркиванием в переменной - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть переменная с именем $folder_name, которая содержит строку

Release_2019_Config_V6_Standalone_PJ6678_Test

, которая является именем папки. Я пытаюсь извлечь PJ6678 из имени папки. Я знаю, что имя папки будет содержать идентификатор пользователя (текст, который мне нужен) между 5-м и 6-м подчеркиванием, я не знаю, какой текст / символы будут присутствовать после 6-го подчеркивания.

Я используюСкрипт Bash, я был бы очень признателен за помощь, если бы кто-то мог помочь с этой функциональностью, поскольку я полностью заблудился, пытаясь использовать sed (после нескольких часов чтения я предполагаю, что это правильный инструмент для работы?

Ответы [ 4 ]

3 голосов
/ 05 ноября 2019

Вот решение только для Bash:

#!/bin/bash
INPUT="Release_2019_Config_V6_Standalone_PJ6678_Test"
IFS='_' read -ra IN <<< "$INPUT"
echo ${IN[5]}

Или используйте cut:

cut -d '_' -f 6 <<< "Release_2019_Config_V6_Standalone_PJ6678_Test"

Или используйте awk:

awk -F "_" '{ print $6 }' <<< "Release_2019_Config_V6_Standalone_PJ6678_Test"
2 голосов
/ 05 ноября 2019

Если вам нужно решение с чистым bash, вы можете использовать токен для имени файла и выбрать 5-й элемент

IFS=_ read -a token <<< "$folder_name"
id=${token[5]}

Устранение зависимости и снижения производительности при запуске дополнительных программ для имени папки.

1 голос
/ 05 ноября 2019

Для полноты, вот решение для чистой оболочки, которое не использует bash расширения, такие как массивы.

$ folder_name=Release_2019_Config_V6_Standalone_PJ6678_Test
$ tmp=${folder_name#*_*_*_*_*_}  # Because we know how many _ to strip
$ echo ${tmp%_*}
PJ6678

Поскольку оператор # удаляет префикс кратчайший , это не позволит * соответствовать самому _;в противном случае мы могли бы сократить префикс, сопоставив символ подчеркивания одному из литералов _ в шаблоне.

1 голос
/ 05 ноября 2019

Попробуйте эту команду:

echo $a | awk -F'_'  '{print $6}'

Здесь _ - разделитель, а $a - переменная, которая содержит значение.

...