Bash получить подстроку к переменной с помощью регулярных выражений - PullRequest
0 голосов
/ 16 декабря 2018

С помощью скрипта bash мне нужно найти строку типа 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.8.1-SNAPSHOT' в переменной для следующей манипуляции.

1 Ответ

0 голосов
/ 16 декабря 2018

Вы можете использовать

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

См. онлайн-демо .

Поскольку вы используете опцию P, я предполагаю, что вы можете использовать регулярное выражение PCRE с вашимgrep.Чтобы вывести совпадение, вам также необходимо добавить опцию o.

Необходимое регулярное выражение: version\s*=\s*'\K[^']+:

  • version - соответствует version подстрока
  • \s*=\s* - =, заключенная в 0+пробелы
  • ' - ' char
  • \K - оператор сброса совпадений, отбрасывающий весь найденный текст
  • [^']+ - 1 или более символов другогочем '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...