在单个命令中获取令牌

时间:2019-04-08 17:07:26

标签: bash shell awk

我有一个配置文件,里面有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

3 个答案:

答案 0 :(得分:1)

您可以使用grep隔离包含令牌的行:

cat test  | grep token'

如果您只想要令牌本身而没有“ token =“,请添加awk:

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

如果您只想获取令牌的字符串,而没有“”字符,请添加tr:

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

答案 1 :(得分:1)

这可以使用更通用的方式在单个strlen(a) + strlen(b) + 1中完成。我在这里添加了一个名为awk的变量,我们可以在其中提及要打印的出现值。

occur

在这种情况下,它将仅打印行令牌第二个字段(第二次出现)的值。 一个人可以更改awk -v occur="2" -F' = ' '/token/{if(++count==occur){print}}' config.txt 的值并可以打印该行的令牌的值。



编辑: 为了使处理速度更快,我现在也在代码中添加了occur,这将迫使awk程序退出尽快找到匹配的匹配字符串。

exit

答案 2 :(得分:0)

我认为可以使用以下命令。

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

OR

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

OR

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

OR

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