Bash使用正则表达式将子字符串转换为变量

时间:2018-12-16 10:05:20

标签: regex bash

使用bash脚本,我需要从文本文件中搜索类似namespace MultipleSkype { class Program { static void Main(string[] args) { int InstanceNumbers = 0; Console.WriteLine("Please Enter Instances of Skype to Open"); InstanceNumbers = Convert.ToInt32(Console.ReadLine()); createInstances(InstanceNumbers); } private static void createInstances(int instanceNumbers) { string fileName=""; string x86 = @"C:\Program Files\Skype\Phone\skype.exe"; string x64 = @"C:\Program Files (x86)\Microsoft\Skype for Desktop\Skype.exe"; Console.WriteLine("Checking Version of Skype..."); if (checkIf86OR64(x86)) { fileName = "skype86.bat"; } else if (checkIf86OR64(x64)) { fileName = "skype.bat"; } for (int i = 0; i < instanceNumbers; i++) { Process proc = null; try { proc = new Process(); proc.StartInfo.FileName = fileName; proc.StartInfo.CreateNoWindow = false; proc.Start(); proc.WaitForExit(); } catch (Exception ex) { Console.WriteLine(ex.StackTrace.ToString()); } } } //Check that dir exists private static bool checkIf86OR64(string dir) { if (File.Exists(dir)) { return true; } return false; } } } 的字符串,并将值version = '1.8.1-SNAPSHOT'放入变量中。

我尝试使用下一个代码,但没有结果:

'1.8.1-SNAPSHOT'

怎么了?还有另一种方法吗?

一些文本文件:

version=$(grep -P "version\s?=\s?'([a-zA-Z.\d-]){5,20}?'" file.txt) 
regex="'([a-zA-Z.\d-]){5,30}?'"
value=`expr match "$version" '([a-zA-Z.\d-]){5,30}?'`

需要将所需的字符串buildscript { repositories { mavenCentral() } dependencies { classpath('org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE') } } springBootVersion = '2.0.7.RELEASE' apply plugin: 'java' apply plugin: 'idea' apply plugin: 'org.springframework.boot' // for Glassfish //apply plugin: 'war' jar { baseName = 'work-space' version = '1.8.1-SNAPSHOT' } 放入变量中,以进行下一次操作。

1 个答案:

答案 0 :(得分:2)

您可以使用

version="$(grep -oP "version\s*=\s*'\K[^']+" file)"

请参见online demo

当您使用P选项时,我假设您可以在grep中使用PCRE regex。要输出匹配项,您还需要添加o选项。

您需要的正则表达式为version\s*=\s*'\K[^']+

  • version-匹配version子字符串
  • \s*=\s*-=内含0+空格
  • '-一个'字符
  • \K-匹配重置运算符会丢弃到目前为止已匹配的所有文本
  • [^']+-除'之外的1个或多个字符