Как использовать 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 не работает?

Спасибо за вклад.

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