
Мне нужно использовать 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"