首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从末尾开始提取所有内容直到找到"/“的Regex

从末尾开始提取所有内容直到找到"/“的Regex
EN

Stack Overflow用户
提问于 2022-08-12 20:06:16
回答 6查看 93关注 0票数 0

我正在用bash编写一个脚本,其中我使用带有regex表达式的grep函数来提取我将用作变量的id。

目标是提取所有字符,直到找到/为止,但是字符'}应该被忽略。

file.txt:

代码语言:javascript
复制
{'name': 'projects/data/locations/us-central1/datasets/dataset/source1/messages/B0g2_e8gG_xaZzpbliWvjlShnVdRNEw='}

命令:

代码语言:javascript
复制
cat file.txt | grep -oP "[/]+^"

当前命令不起作用。

期望产出:

代码语言:javascript
复制
B0g2_e8gG_xaZzpbliWvjlShnVdRNEw=
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2022-08-12 21:15:25

你给出的判决是:[/]+^

它有几个错误:

  • 你在最后使用^似乎意味着你认为你可以要求软件向后搜索--你不能;
  • [/]只与匹配斜杠字符

您的示例显示了一个格式错误的JSON对象,它包含一个键值对,每个键值都包含在单引号中。JSON需要双引号,所以可能不是JSON。

如果做了几个假设,就有可能提取出您似乎想要的输入部分:

  • 文件包含一行;以及
  • 键和值是由单引号环绕的字符串;以及
  • 任一:
    • 值部分紧跟};或
    • 名称部分不能包含/

您正在使用-P选项对grep,因此查找操作符是可用的。

代码语言:javascript
复制
(?<=/)[^/]+(?=')
  • lookbehind声明匹配的前面是/
  • 一个或多个非斜杠(比赛)
  • 查找前声明匹配后面跟着'
代码语言:javascript
复制
[^/]+(?='})
  • 一个或多个非斜杠(比赛)
  • 查找前声明匹配后面是',然后是}

请注意,匹配在行开始的越早越好,对于贪婪的+,它越长越好。

票数 1
EN

Stack Overflow用户

发布于 2022-08-12 23:09:16

使用任何awk:

代码语言:javascript
复制
$ awk -F"[/']" '{print $(NF-1)}' file.txt
B0g2_e8gG_xaZzpbliWvjlShnVdRNEw=
票数 1
EN

Stack Overflow用户

发布于 2022-08-12 23:09:52

基本参数解析.

代码语言:javascript
复制
$: x="$(<file.txt)"            # file contents in x
$: x="${x##*/}"                # strip to last / to get rid of 'name'
$: x="${x//[^[:alnum:]=]}"     # strip not alphanumeric or = to clean the end
$: echo "$x"
B0g2e8gGxaZzpbliWvjlShnVdRNEw=
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73339288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档