regex - 正则表达式不提取组
问题描述
我有以下文字
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/'
,不知道为什么它不起作用,它会返回我输入的全部内容
解决方案
使用您显示的示例,请尝试在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:空格 ' 并将以下数字保留到第一个捕获组中,在替换时,仅用数字替换整行,这将根据要求仅给出数字作为输出。
推荐阅读
- oracle - Oracle 按限制过滤结果
- php - 如何在 laravel 的编辑视图的下拉列表中获取插入的值?
- mongodb - 如何在mongodb中进行数据库备份
- python - 获取 MS Excel 属性,Python 3.6
- powershell - 在需要它的计算机上推送许可证文件
- r - 根据分隔符提取文本但遗漏了缺失的条目
- google-picker - Google Picker Search 仅在父文件夹内
- electron - 如何在 Linux 上启动 Electron JS 构建?
- python - 修复一个循环后代码无响应的错误
- php - 尝试从站点中提取数据,适用于大多数但不适用于此