首页 > 解决方案 > 正则表达式不提取组

问题描述

我有以下文字

availableMemoryMb: 1024 buildId: b12dfv231-3422-4dsvec-adfdfa-1dvf13vd8 entryPoint: get_request_data httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://us-central1-vvsfdv ds.cloudfunctions.net/evses ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud maxInstances: 1 name: projects/sasvbsd/locations/us-central1/functions/adfva runtime: python37 serviceAccountEmail: abcd-def@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/gcf-upload-us-central1-ed32d2-7232322-44h73-96f0-6610891aa7ca/8f5950a6-0efd-4cca-9297-b5104156208b.zip?GoogleAccessId=service-12332@gcf-admin-robot.iam.gserviceaccount.com&Expires=1619892863&Signature=aH1%2BW741GRtVNM1rrwpz8jfxzhNCnQ%2BP5of%2Bq0ghMrcsmR6lM6PgJnHFVTZ5FsWC484rUhFIhBj5IYNEP0Egw4VA0Ui9o3hQSL9NdqBUMtmLM%2BqKKagHVHtUm1Rfr6U4xRxUm4z0SiHNSMB5aZEfwbdmCj6r%2FEx5HuKp5c9HNyJ8LYXynBrjztlZr9GkmHkyHMPM9CjW0c33BMeEWHEGqxUAj%2FyPksPn7y9WPbQFCiwUiQbd3ayuW%2FMVC53IVwjxkojrzLATGVvu12%2Brc9fQs7Zz%2FEc1ZthUVwBAdBYVj8Fn%2Fde5S7OJwdRUm938N%2B5gCX4x%2B7s25Bq6Lgk%2FLWesLw%3D%3D status: ACTIVE timeout: 60s updateTime: '2021-05-01T17:45:13.094Z' versionId: '7'

我需要从中提取最后一个(不总是)的versionId(在这种情况下:7),这是我的正则表达式sed 's/\(.*\)versionId:\s+\'\([0-9]+\)\'/\2/',不知道为什么它不起作用,它会返回我输入的全部内容

标签: regexbashsed

解决方案


使用您显示的示例,请尝试在sed. 您无需创建 2 个反向引用,只需一个即可完成此任务。

sed -E 's/.*versionId:[[:spaces:]]+'"'"'([0-9]+)'"'"'/\1/'  Input_file

或者(根据上面 hilipati 的评论可以写成):

sed -E "s/.*versionId:[[:space:]]+'([0-9]+)'/\1/" Input_file

说明:sed中使用-E启用 ERE(扩展正则表达式)的选项。然后使用s它的选项执行替换,其中匹配所有内容直到 versionId:空格 ' 并将以下数字保留到第一个捕获组中,在替换时,仅用数字替换整行,这将根据要求仅给出数字作为输出。


推荐阅读