sed предотвращает удаление остальной линии

У меня есть файл, содержащий строку, которую я хочу заменить чем-то посредине:

database.url=jdbc:mysql://my.sql.ip.address:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull 

Предположим, что я хочу изменить IP-адрес; Я использовал следующую команду sed :

 sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi/' myFile 

Эти результаты:

 database.url=jdbc:mysql://zizi 

Но я хочу:

 database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull 

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

3 Solutions collect form web for “sed предотвращает удаление остальной линии”

Просто напечатайте вторую следующую захваченную группу также \2 (я не изменяю или не улучшаю ваш sed )

 sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi\2/' myFile 

это улучшенная команда для изменения только согласованной IP-части.

 sed 's/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt 

Если только для строк начинается с database.url :

 sed '/^database\.url/ s/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt 

Или в большей способности и даже короче.

 sed 's/\([1-9]\)\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/NEW/' 

Обратите внимание, что это также может изменить и улучшить, чтобы соответствовать точному IP-адресу, а не соответствовать. 1.1.1.999 как IP, который недействителен.

Более короткий подход:

 sed 's~\(.*mysql://\)[^:]*~\1zizi~' file 

Выход:

 database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull 

Короткое решение sed без обмана:

 $ sed 's#//[^:]*#//zizi#' file database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull 

Это заменяет все между // и следующим : строка, которую вы хотите вставить.

  • Удалить строки из файла в зависимости от строк, найденных в другом файле
  • Редактируйте несколько строк из определенного раздела INI-файла
  • Bash - Разбить предыдущие параметры команд
  • Обратная последовательность файла с инструментами POSIX?
  • Извлечь имя группы из `id` и сохранить ее в переменной
  • Как объединить все файлы в заданном каталоге по дате, где я хочу, чтобы самый новый файл был сверху?
  • Как выполнить действие только в первой строке?
  • Мне нужно удалить. в моих данных
  • Многострочная обработка текста: редактирование sshd_config
  • Файлы с изменением хвоста
  • Как я могу отображать 3 строки текста за один раз на 1 строку?
  • Linux и Unix - лучшая ОС в мире.