Intereting Posts
Linux fgrep как извлечь «only_words_in_my_language» из большого файла «MIXED_WORDS»? afuse with sshfs: где есть варианты настройки плавких предохранителей? Как показать непечатаемые символы в нано В чем смысл (^ |) ABC (| $) как расширенного REGEX? При импорте ключа во время установки yum, где хранится этот ключ? ifconfig wlan0 показывает выборку информации интерфейса: Устройство не найдено Служба CentOS – cron умирает каждые несколько дней Debian chroot блокирует PTTY на хосте Объединить jq-выход в строку с разделителями-запятыми Как я могу автоматизировать отправку почты с помощью скрипта? rsyslog: Как я могу гарантировать, что rsyslog предоставляет сообщение об ошибке / отладке всякий раз, когда сообщения отбрасываются? Как может выводиться уровень запуска «1 S»? Как использовать групповые символы оболочки с sudo? Какова связь между каталогами «/etc/init.d» и «/etc/rcX.d» в Linux? Как определить, отключен ли монитор HDMI в Ubuntu?

Как использовать 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 для того же.

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

 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"