У меня есть файл журнала, например:
compile.log
C:\Program Files\File.ext(25,10) : error <ERROR_CODE>: <ERROR_MESSAGE>
C:\Program Files\File.ext(36,13) : error <ERROR_CODE>: <ERROR_MESSAGE>
C:\Program Files\File.ext(41,51) : warning <WARNING>: <WARNING>
C:\Program Files\File.ext(64,55) : error <ERROR_CODE>: <ERROR_MESSAGE>
: information: result 3 error(s), 1 warning(s)
А хочется так:
compile.log
/Users/user/Library/Folders/Program Files/File.ext(25,10) : error <ERROR_CODE>: <ERROR_MESSAGE>
/Users/user/Library/Folders/Program Files/File.ext(36,13) : error <ERROR_CODE>: <ERROR_MESSAGE>
/Users/user/Library/Folders/Program Files/File.ext(41,51) : warning <WARNING>: <WARNING>
/Users/user/Library/Folders/Program Files/File.ext(64,55) : error <ERROR_CODE>: <ERROR_MESSAGE>
: information: result 3 error(s), 1 warning(s)
Пробовал множество вариантов sed и awk с различными сообщениями об ошибках.
Может ли кто-нибудь показать мне работающее (macOS 10.14.1) решение?
ОБНОВЛЕНИЕ: Все работает как положено, после того как я преобразован compile.log в UTF-8. По-видимому, среда Windows создала закодированный журнал utf-16le.





sed 's/C:\\Program Files\\File.ext//Users/user/Library/Folders/Program Files/File.ext/g' compile.log > compile-replaced.log
используйте форму s\@...@...@ для целей поиска, которые включают символы / (вам может понадобиться или не понадобиться ведущий символ ``. Удачи.
Теперь это либо sed: 1: "s\@C:\\Program Files@/ ...": substitute pattern can not be delimited by newline or backslash, либо sed: RE error: illegal byte sequence без начального \.
@Geri Может быть, вам следует получить больше информации здесь [stackoverflow.com/questions/19242275/…
Спасибо, я получил там информацию (пробы и ошибки уже несколько часов), но строки не были заменены (compile-replaced.log имеют то же содержание, что и оригинал).
Спасибо, это была проблема с кодировкой, ничего особенного с sed. Тем не менее, ответ работает просто отлично.
При работе с путями к каталогам лучше просто выбрать другой разделитель, чем / для команды sed, чтобы вам не нужно было экранировать все / в пути, например: s:/abc/def:/ghi: вместо s//abc/def//f\ghi/'
@Geri: проверьте свою переменную LANG, соответствует ли она кодировке файла.
Спасибо! Однако на самом деле он показывает пустой
compile-replaced.log. Там написано:sed: RE error: illegal byte sequence