Как использовать grep в условном поиске, предшествующем команде замены текста sed
Я пытаюсь изменить путь во всех файлах m3u. Я знаю, что могу сделать это с помощью regexxer fe, но я пытаюсь научиться bash.
Это команда, которую я понял, но она не работает.
grep -lr -i -e 'M:\\' * | xargs -0 sed -i 's/M:\\/T:\\/g'
Я подозреваю, но только подозреваю, это из-за специальных символов в именах файлов. Как с этим бороться?
2 ответа
Наконец я нашел ответ:
grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'
Мне пришлось добавить -Z, чтобы убедиться, что каждое имя файла читается, а не весь пакет в одну длинную строку.
Это сделал трюк:
изменить путь Windows M:\
к точке монтирования в Ubuntu media/MODERNE MUZIEK
find -iname '*.m3u' -print0 |
xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'
поменять обратные косые черты на прямые косые черты
find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'
Теперь я могу открыть файлы ex-windows m3u с помощью проигрывателя VLC в Ubuntu.
Он воспроизводится независимо от того, сколько пробелов или странных символов в имени файла.
Можно ли это улучшить? это может быть сделано с grep
сделать его условным, как в моей первой неудачной попытке? Почему grep не работает?
Спасибо за вклад.