Я хочу заменить путь к файлу на другой, используя sed
. Я прилагаю небольшую часть моего файла. Исходный файл справки
:
Dir=D:\test\foo
Dir=D:\test\bar
результат должен выглядеть следующим образом
Dir=E:\test1\foo
Dir=E:\test1\bar
Используя sed
с группировкой шаблона:
sed -r 's/(.*=)D(:\\[^\]+)(\\.*)/\1E\21\3/' file.txt
Весь ()
указывают на группы шаблона, цель сгруппироваться состоит в том, чтобы использовать их в замене, просто используя \#
, ссылка (замена #
с числом группы, увеличивая от 1, слева направо)
(.*=)
будет соответствовать части прежде сначала D
, на это ссылаются как группа 1 т.е. \1
в замене
(:\\[^\]+)
соответствия до второго \
после D
, это \2
(\\.*)
соответствия все остальное после второе \
(включая), это \3
Пример:
$ cat file.txt
Dir=D:\test\foo
Dir=D:\test\bar
$ sed -r 's/(.*=)D(:\\[^\]+)(\\.*)/\1E\21\3/' file.txt
Dir=E:\test1\foo
Dir=E:\test1\bar
<час> , Если у Вас есть несколько случаев и Вы хотите заменить их всех:
$ cat file.txt
Dir=D:\test\foo Dir=D:\bar\foo
Dir=D:\test\bar
$ sed -r 's/D(:\\)[^\]+/E\1test1/g' file.txt
Dir=E:\test1\foo Dir=E:\test1\foo
Dir=E:\test1\bar