我正在用bash编写一个脚本,其中我使用带有regex表达式的grep函数来提取我将用作变量的id。
目标是提取所有字符,直到找到/为止,但是字符'和}应该被忽略。
file.txt:
{'name': 'projects/data/locations/us-central1/datasets/dataset/source1/messages/B0g2_e8gG_xaZzpbliWvjlShnVdRNEw='}命令:
cat file.txt | grep -oP "[/]+^"当前命令不起作用。
期望产出:
B0g2_e8gG_xaZzpbliWvjlShnVdRNEw=发布于 2022-08-12 21:15:25
你给出的判决是:[/]+^
它有几个错误:
^似乎意味着你认为你可以要求软件向后搜索--你不能;[/]只与匹配斜杠字符。您的示例显示了一个格式错误的JSON对象,它包含一个键值对,每个键值都包含在单引号中。JSON需要双引号,所以可能不是JSON。
如果做了几个假设,就有可能提取出您似乎想要的输入部分:
};或/您正在使用-P选项对grep,因此查找操作符是可用的。
(?<=/)[^/]+(?=')/'[^/]+(?='})',然后是}请注意,匹配在行开始的越早越好,对于贪婪的+,它越长越好。
发布于 2022-08-12 23:09:16
使用任何awk:
$ awk -F"[/']" '{print $(NF-1)}' file.txt
B0g2_e8gG_xaZzpbliWvjlShnVdRNEw=发布于 2022-08-12 23:09:52
基本参数解析.
$: 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=https://stackoverflow.com/questions/73339288
复制相似问题