Удалите строки, соответствующие регулярному выражению, в файле yaml с Go - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть следующий файл yaml myfile.yml:

variables:
  PYTHONUNBUFFERED: 1
  GIT_STRATEGY: clone
  Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443

include:
  - project: "myproject"
    file: "/test.yml"

stages:
  - mystage

, где я хочу удалить строку, начинающуюся с "Grp c"

мой код:

package main

import (
    "fmt"
    "io/ioutil"
    "strings"
    "regexp"
)

func main() {

    filename := "myfile.yml"

    content, err := ioutil.ReadFile(filename)
    check(errReadFile)

    if err != nil {
      panic(err)
    }

    m := regexp.MustCompile("^  Grpc__(.*)$") 
    grpcRemoved := m.ReplaceAllString(string(content), "")
    fmt.Println(grpcRemoved)
}

В конце ничего не удаляется.

Я проверил свое регулярное выражение, используя MatchString, он вернул true для:

matchString, _ := regexp.MatchString("^  Grpc__(.*)$", "  Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443")

, но

matchStringFile, _ := regexp.MatchString("^  Grpc__(.*)$", string(content))

вернул false, чего не ожидаю. Тогда я полагаю, что ReplaceAllString не работает, потому что он не находит ничего для замены.

Что не так с моим кодом?

1 Ответ

1 голос
/ 27 апреля 2020

Это из-за вашего регулярного выражения: "^ Grpc__(.*)$", ^ означает начало строки, а $ означает конец строки.

Эта строка: " Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443" соответствует, потому что она начинается с Grpc__ и заканчивается mydomain.com:443

Но строка в файле yaml начинается с variables: ... и заканчивается ... -mystage, поэтому это не соответствует.

Попробуйте использовать "Grpc__(.*)" (без ^ и $), и это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...