У меня есть много Windows базирующиеся .m3u плей-листы - они запускают с ..\..\
и имейте \
вместо /
для путей к папкам, тогда как Ubuntu предпочитает, чтобы они запустили с /media/usr/part/dir/
(т.е. полный путь).
Я хочу внести следующие изменения
..\..\
с /media/usr/part/dir/
\
с /
Я пытался использовать find /home/user/directory -name \*.m3u -exec sed -i "s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g" {} \;
как предложено здесь, и пытался использовать _
и :
как разделители, как предложено здесь.
Однако я продолжаю добираться
sed: -e expression #1, char 36: unterminated `s' command
Как я делаю необходимые замены в своих файлах?
s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g
Это sed
команда является неправильной, потому что она имеет отсутствие \
перед первым /
, который приводит предыдущее \
выйти из него как из литерала /
(изменение шаблона и "еда" разделителя) и, в целях замены единственного происшествия ..\..\
на каждой строке это имеет чрезмерное g
переключатель в конце; в любом случае это пропускает замену \
символы с /
характерная роль.
Используйте этого вместо этого; я имею, брал на себя смелость изменения разделителя, чтобы избавиться от вероятного внезапного синдрома зубочистки склонности и измениться ;
с +
улучшать производительность команды по огромному количеству файлов:
find /home/user/directory -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
Вывод:
~/tmp$ cat playlist1.m3u
..\..\path1
stuff
..\..\path2\path2
stuff
..\..\path3\path3\path3
stuff
~/tmp$ find . -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
~/tmp$ cat playlist1.m3u
/media/usr/part/dir/path1
stuff
/media/usr/part/dir/path2/path2
stuff
/media/usr/part/dir/path3/path3/path3
stuff