Как использовать sed для замены всего остального на другую строку, кроме шаблона?

Как использовать sed для замены всего остального на другую строку, кроме шаблона?

Мне нужно использовать sed, чтобы заменить все перед сопоставлением шаблона с другой строкой в ​​файле

В моем файле есть различные пути. Последние несколько компонентов этих путей одинаковы независимо от пользователя, однако первые несколько компонентов будут меняться.

Например, дляпользователь 1, файл содержит следующий путь

build:
   - "/Users/user1/Projects/Stash/sdk/license.txt"

Дляпользователь 2, путь может быть

build:
   - "/Users/user2/Documents/Work/sdk/license.txt"

Последние 2 компонента - это "/sdk/license.txt" одинаковы для каждого пользователя.

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

решение1

Вы можете просто использовать обратные ссылки

sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'

Здесь

\(....\)используется для группового сопоставления и сохранения его для будущего использования, для замены можно использовать \1 \2как имя переменной.

Итак, по вашему требованию, я разбиваю линию на три группы

\(^[ ]*\- "\)дляspace - "

\(.*\)для части, подлежащей замене, например/Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\)для той же части, т.е.sdk/license.txt"

Связанный контент