Bash 在单个命令中获取令牌

Bash 在单个命令中获取令牌,bash,shell,awk,Bash,Shell,Awk,我有一个配置文件,其中包含gitlab令牌,令牌有两个不同的值,有没有办法在一个bash脚本命令中获取这些值。Lokking for single line命令获取令牌 concurrent = 10 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "gitlab" limit = 13 url = "gitlab url" token = "xxxxxxxxxxxxx

我有一个配置文件,其中包含gitlab令牌,令牌有两个不同的值,有没有办法在一个bash脚本命令中获取这些值。Lokking for single line命令获取令牌

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

我认为这是可能的使用以下命令

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


您可以使用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
中完成。我在这里添加了一个名为
occurrent
的变量,我们可以在其中提到要打印的事件值

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



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

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

您打算在两个单独的变量中获取这两个令牌吗?IMHO,这可以在单个
awk
中完成,请参见一次
awk-F“=”/token/&NR==1{print$2}“
;当您可以有两个条件时,为什么要有两个单独的实例呢?嗯,这可以在单个
awk
中完成,请看这一点,一旦管道有性能损失,尤其是在处理启动成本占总运行时间百分比很高的足够小的数据时。当您运行
grep-e令牌时测试
grep-e令牌…被授予,至少对于
cat
grep
而言,惩罚相当轻微;另一方面,
cat foo | tail
必须读取所有
foo
(即使是多GB或TB的数据),而
tail-foo
tail@Prasad-Ligade,请您尝试一下这个解决方案,并告诉我这是否对您有帮助?
cat test  | grep token | awk '{print $3}' |  tr -d \"
awk -v occur="2" -F' = ' '/token/{if(++count==occur){print}}'  config.txt
awk -v occur="2" -F' = ' '/token/{if(++count==occur){print;exit}}'  config.txt