Bash 在单个命令中获取令牌
我有一个配置文件,其中包含gitlab令牌,令牌有两个不同的值,有没有办法在一个bash脚本命令中获取这些值。Lokking for single line命令获取令牌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
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