Замените значение, содержащее кавычки, с помощью команды sed и регулярного выражения - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь заменить новую версию в своем файле yaml, используя sed, но я не могу понять, чего мне не хватает в этом утверждении.

Я хочу преобразовать

version: "x.x.x"

на

version: "z.z.z"

Вот мой текущий sed Заявление:

sed -i "" "s|version: "[[:digit:]].[[:digit:]].[[:digit:]]"\|version: "${VERSION}"|" file.yaml

Ответы [ 3 ]

1 голос
/ 01 апреля 2020
sed -i -r "s@version: [0-9]+\.[0-9]+\.[0-9]+@version: ${VERSION}@" file.yaml
1 голос
/ 01 апреля 2020

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

sed -i "" 's|version: "[[:digit:]]\.[[:digit:]]\.[[:digit:]]"|version: "'"${VERSION}"'"|' file.yaml

Для соответствия одной или нескольким цифрам вы можете использовать \{1,\} квантификатор диапазона после eacg [[:digit:]]:

sed -i "" 's|version: "[[:digit:]]\{1,\}\.[[:digit:]]\{1,\}\.[[:digit:]]\{1,\}"|version: "'"${VERSION}"'"|' file.yaml

Подробно

  • version: "[[:digit:]]\.[[:digit:]]\.[[:digit:]]" - LHS, соответствует version:, пробел, ", ди git, ., ди git, . и ди git (цифры, если используется \{1,\})
  • version: "'"${VERSION}"'" - RHS, замена, заменяется на version:, пробел, ", VERSION переменное содержимое и ".

Вы можете немного сократить команду, используя

sed -i "" 's|\(version: "\)[[:digit:]]\(\.[[:digit:]]\)\{2\}"|\1'"${VERSION}"'"|' file.yaml

, где \(version: "\) захвачено в группу 1, а внутри RHS \1 используется для его вставки обратно, а повторение . и di git выполняется с другой группой, количественно определенной с помощью \{2\} (два раза) количественного показателя.

0 голосов
/ 01 апреля 2020
$ sed 's/\(version: "\)[^"]*/\1'"$VERSION"'/' file
version: "z.z.z"
...