Как заменить строку, содержащую путь к файлу, используя sed

Я хочу заменить путь к файлу на другой, используя sed. Я прилагаю небольшую часть моего файла. Исходный файл справки

:

Dir=D:\test\foo
Dir=D:\test\bar

результат должен выглядеть следующим образом

Dir=E:\test1\foo
Dir=E:\test1\bar
2
задан 18 April 2016 в 13:28

1 ответ

Используя 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
2
ответ дан 18 April 2016 в 23:28

Другие вопросы по тегам:

Похожие вопросы: