Получить токен одной командой

У меня есть файл конфигурации, в котором есть токен gitlab с двумя разными значениями для токена. Есть ли способ получить эти значения в одной команде сценария bash. Блокировка однострочной команды для извлечения токена.

concurrent = 10
check_interval = 0
[session_server]
  session_timeout = 1800
[[runners]]
  name = "gitlab"
  limit = 13
  url = "gitlab url"
  token = "xxxxxxxxxxxxx"
  executor = "docker+machine"
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = true
    shm_size = 0
  [runners.machine]
    IdleCount = 0
    IdleTime = 300
    MaxBuilds = 600
    MachineDriver = "amazonec2"
    MachineName = "gitlab-docker-machine-%s"
    OffPeakPeriods = ["* * 0-9,17-23 * * mon-fri *", "* * * * * sat,sun *"]
    OffPeakTimezone = "Europe/London"
    OffPeakIdleCount = 0
    OffPeakIdleTime = 30
[[runners]]
  name = "gitlab"
  limit = 11
  url = "gitlab url"
  token = "yyyyyyyyyyyyyyyyyyy"
  executor = "docker+machine"
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = true
    shm_size = 0

Вы собираетесь получить два токена в двух отдельных переменных?

BlackPearl 08.04.2019 19:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
95
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я думаю, что это возможно с помощью следующей команды.

awk -F' = ' '/token/ {print $2}'  config.txt | sed -n 1p

ИЛИ

awk -F' = ' '/token/ {print $2}'  config.txt | sed -n 2p

ИЛИ

awk -F' = ' '/token/ {print $2}'  config.txt | awk 'NR==1'

ИЛИ

awk -F' = ' '/token/ {print $2}'  config.txt | awk 'NR==2'

ИМХО, это можно было сделать и в сингле awk см. один раз stackoverflow.com/a/55578745/5866580

RavinderSingh13 08.04.2019 19:29
awk -F" = " '/token/ && NR == 1 { print $2 }'; зачем иметь два отдельных экземпляра, когда вы можете просто иметь два условия?
Charles Duffy 08.04.2019 19:31

Вы можете использовать grep, чтобы изолировать строки, содержащие токен:

cat test  | grep token'

Если вам нужен только сам токен без "token =", добавьте awk:

cat test  | grep token | awk '{print $3}'

И если вы хотите получить только строку токена без символа ", добавьте tr:

cat test  | grep token | awk '{print $3}' |  tr -d \"

ИМХО, это можно было сделать и в сингле awk, см. один раз stackoverflow.com/a/55578745/5866580

RavinderSingh13 08.04.2019 19:29

Конвейеры имеют снижение производительности, особенно при работе с достаточно небольшими объемами данных, когда затраты на запуск являются значительными в процентах от общего времени выполнения. Когда вы запускаете grep -e token test или grep -e token <test, grep имеет прямой дескриптор файла test; когда вы запускаете cat test | grep -e token, файл test сначала читается одной программой (cat), записывается на ее стандартный вывод, читается второй программой (grep) на стандартный ввод, записывается на стандартный вывод этой программы — все это не бесплатно.

Charles Duffy 08.04.2019 19:33

...при условии, что по крайней мере для cat и grep этот штраф довольно незначителен; с другой стороны, cat foo | tail должен прочитать все foo (даже если это несколько ГБ или ТБ данных), тогда как tail foo или tail <foo можно сразу перейти к концу. Точно так же sort <foo может распараллеливать, разветвляясь на подпроцессы или потоки, которые параллельно сортируют разные подразделы файла, а затем выполняют сортировку слиянием для объединения их результатов; но cat foo | sort может читать только от начала до конца.

Charles Duffy 08.04.2019 19:34

Это можно сделать одним awk более общим способом. Я добавил здесь переменную с именем occur, где мы можем указать, например, какое значение вхождения мы хотим напечатать.

awk -v occur = "2" -F' = ' '/token/{if (++count==occur){print}}'  config.txt

В этом случае он будет печатать значение только для второго поля токена строки (второе вхождение). Можно изменить значение occur и вывести значение токена этой строки.



Обновлено: Чтобы сделать его более быстрым с точки зрения обработки, я также добавляю exit в свой код, что заставит awk-программу выйти как можно скорее, если она найдет совпадающую строку совпадающего вхождения.

awk -v occur = "2" -F' = ' '/token/{if (++count==occur){print;exit}}'  config.txt

@Prasad Ligade, не могли бы вы попробовать это решение один раз и сообщить мне, поможет ли оно вам?

RavinderSingh13 08.04.2019 19:56

Другие вопросы по теме