Я пытался сделать замену sed. По какой-то причине, я просто не могу моя голова вокруг СЭД и регулярные выражения (это мой второй вопрос СЕПГ)Найдите замену строки до и после
В основном я хочу найти текст и заменить затем найти следующее вхождение некоторого текста и заменить, что
до сих пор я это
echo "This could be anywhere and this bit should be changed \$\{hcvar-BookName\} and this would remain" | sed 's/$\\{hcvar-/" + hcvar-/g'
Это возвращает:
*This could be anywhere and this bit should be changed " + hcvar-BookName\} and this would remain*
Однако я хочу вернуться
*This could be anywhere and this bit should be changed " + hcvar-BookName + " and this would remain*
Это заменит} с + "
логика будет что-то вроде:
Find: \$\{hcvar-
Replace with: " + hcvar-
Then find the next occurrence of: \}
Replace with: + "
второй бит для замены будет сразу после строки, которая содержит: hcvar-
Это должно работать для следующих примеров струн.
- Это может быть где угодно, и этот бит должен быть изменен \ $ {hcvar-BookName}, и это останется
- Это может быть в любом месте и этот бит должен быть изменен \ $ {hcvar-somethingelse}, и это будет оставаться
- Это может быть где угодно, и этот бит должен быть изменен
\ $ {hcvar-wouldnevercontainspaces}, и это останется
Любая помощь будет оценена.
В POSIX СЭД '$' является литеральным, если это не последний символ в части 'pattern' команды substitute. Однако во многих вариантах '' 'не будет буквальным, если это последний логический символ, то есть:' s/\ (a \ | $ \)/b/'заменит' a' или нулевой байт после того, как пространство с шаблоном ' b'. – andlrc