Поиск Заменить Сед, используя подстановочный знак - PullRequest
1 голос
/ 12 марта 2020

Здравствуйте, я новичок в скриптинге, и у меня возникла следующая проблема

Мне нужно заменить 20069.1216.0

HintPath..\packages\String.20069.1216.0\lib\net\Thoo.Tkc.dll/HintPath

Это прекрасно работает при замене 20069.1216.0 с тем, что предоставлено в $ 2

`xargs sed -i 's/String.20.........0/String.'"${2}"'/g'`

Мне нужен способ для sed искать **"String.*\lib\net\"**, где что-нибудь между **String.** и **\lib...** является подстановочным знаком

Это что я пробовал

sed -i 's/String.*\/String.'"${2}"'/g' sed -i 's/String.*\\/String.'"${2}"'/g' sed -i 's/String.\(.*\)\\/String.'"${2}"'/g'

1 Ответ

0 голосов
/ 12 марта 2020

Я предполагаю, что вы вызываете sed внутри функции.

Поэтому попробуйте этот код:

#!/bin/bash

replace() {
  echo 'HintPath..\packages\String.20069.1216.0\lib\net\Thoo.Tkc.dll/HintPath' |\
  sed "s/String\.[0-9.]*/String\.${2}/"
}

replace dont_care filename

Если ваш путь может содержать --SNAPSHOT это решение должно работать на вас:

#!/bin/bash

replace() {
  echo 'HintPath..\packages\String.20069.1216.0--SNAPSHOT\lib\net\Thoo.Tkc.dll/HintPath' |\
  sed "s/String[0-9.]*\(--SNAPSHOT\)\{0,1\}/String\.${2}/"
}

replace dont_care filename
...