У меня есть файл, который содержит такие пути:
C:\bad\foo.c
C:\good\foo.c
C:\good\bar\foo.c
C:\good\bar\[variable subdir count]\foo.c
И я хотел бы получить следующий файл:
C:\bad\foo.c
C:/good/foo.c
C:/good/bar/foo.c
C:/good/bar/[variable subdir count]/foo.c
Обратите внимание, что несоответствующий путь не должен изменяться.
Я знаю, как сделать это с помощью sed для фиксированного числа subdir, но переменное число доставляет мне проблемы. На самом деле, мне пришлось бы использовать много s/x/y/
выражений (столько, сколько максимальная глубина ... не очень элегантно).
Может быть с awk, но этот вид магии мне не под силу.
Кстати, мне нужен этот трюк, чтобы исправить некоторые двоичные файлы gcov на платформе cygwin.
Я имею дело с двоичными файлами; поэтому у меня могут быть следующие данные:
bindata\bindata%bindataC:\good\foo.c
что должно быть переведено как:
bindata\bindata%bindataC:/good/foo.c
Первый \
не должен переводиться, несмотря на то, что он находится на той же строке.
Однако я только что проверил мои .gcno
файлы при редактировании этого текста, и похоже, что все пути обведены нулями, поэтому большинство ответов ниже должно соответствовать.