【发布时间】:2018-10-19 21:04:07
【问题描述】:
我曾多次尝试使用不同的工具来使用 unix 工具从文件中提取模式,但我似乎无法让它们做我想做的事。所以我有一个这样的文件:
[blah]
project=abc123
ON#IRUjdi2ujnq!De
我想获取项目名称。
我尝试过使用 grep、egrep、awk 和 sed,但无法让它们正常工作。这是我目前的尝试。
cat file | sed -n "s/project = \(.*\)/\1/p"
这是当前的输出
abc123
ON#IRUjdi2ujnq!De
出于某种原因,它正在考虑匹配最后两行。我认为我的正则表达式需要在 project = 上进行文字匹配,但似乎情况并非如此。
这里有unix向导可以帮我吗?任何标准的 unix 工具都可以。
------ 编辑 ------
所以实际上我的问题略有不同。其实我在做
gcloud config list project | sed -n "s/project = \(.*\)/\1/p"
对不起,我认为这不会有什么不同,但显然这就是问题所在。
如果你这样做gcloud config list project >> file
它实际上只会将你的项目列表输出到文件中,然后它会打印
Your active configuration is: [default]
到终端,这就是把事情搞砸的原因。如果我手动将执行 gcloud 命令的整个输出写入文件,然后运行 sed ,它确实有效。所以 gcloud 输出数据的方式有点奇怪。
【问题讨论】:
-
使用 GNU grep:
grep -Po 'project=\K.*' file -
[blah]以外的块是否也有project键?或者这是文件中唯一的一行?即,您想要blah.project的值,还是只需要project? -
@BenjaminW。这是文件中唯一的一个
-
awk -F= '$1=="project"{print $2}' file