как использовать grep в условном поиске, предшествующем команде sed text replace

Я пытаюсь изменить путь во многих файлах m3u. Я знаю, что могу сделать это с помощью regexxer f.e. но я пытаюсь изучить bash.

Это команда, которую я выяснил, но она не работает.

grep -lr -i -e 'M:\\' * | xargs -0 sed -i 's/M:\\/T:\\/g'

Я подозреваю, но только подозревают, это связано с особыми символами в именах файлов. Как с этим бороться?

1
задан 4 September 2011 в 13:14

10 ответов

Окончательно я нашел ответ:

grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'

Мне пришлось добавить -Z, чтобы следить за чтением каждого имени файла, а не всей связью в одной длинной строке.

3
ответ дан 25 July 2018 в 21:23

Это сделало трюк:

, чтобы изменить путь к файлу M:\ к точке монтирования в Ubuntu media/MODERNE MUZIEK

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'

, чтобы изменить обратную косую черту для пересылки slashes

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'

Теперь я могу открыть свои ex-windows m3u-файлы с помощью VLC-плеера в Ubuntu. Он играет независимо от того, сколько пробелов или странных символов находится в имени файла.

Возможно ли это улучшить? это можно сделать с помощью grep, чтобы сделать его условным, как в моей первой неудачной попытке? Почему grep не работает?

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

1
ответ дан 25 July 2018 в 21:23

Окончательно я нашел ответ:

grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'

Мне пришлось добавить -Z, чтобы следить за чтением каждого имени файла, а не всей связью в одной длинной строке.

3
ответ дан 2 August 2018 в 03:02

Это сделало трюк:

, чтобы изменить путь к файлу M:\ к точке монтирования в Ubuntu media/MODERNE MUZIEK

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'

, чтобы изменить обратную косую черту для пересылки slashes

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'

Теперь я могу открыть свои ex-windows m3u-файлы с помощью VLC-плеера в Ubuntu. Он играет независимо от того, сколько пробелов или странных символов находится в имени файла.

Возможно ли это улучшить? это можно сделать с помощью grep, чтобы сделать его условным, как в моей первой неудачной попытке? Почему grep не работает?

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

1
ответ дан 2 August 2018 в 03:02

Окончательно я нашел ответ:

grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'

Мне пришлось добавить -Z, чтобы следить за чтением каждого имени файла, а не всей связью в одной длинной строке.

3
ответ дан 4 August 2018 в 18:53

Это сделало трюк:

, чтобы изменить путь к файлу M:\ к точке монтирования в Ubuntu media/MODERNE MUZIEK

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'

, чтобы изменить обратную косую черту для пересылки slashes

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'

Теперь я могу открыть свои ex-windows m3u-файлы с помощью VLC-плеера в Ubuntu. Он играет независимо от того, сколько пробелов или странных символов находится в имени файла.

Возможно ли это улучшить? это можно сделать с помощью grep, чтобы сделать его условным, как в моей первой неудачной попытке? Почему grep не работает?

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

1
ответ дан 4 August 2018 в 18:53

Окончательно я нашел ответ:

grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'

Мне пришлось добавить -Z, чтобы следить за чтением каждого имени файла, а не всей связью в одной длинной строке.

3
ответ дан 6 August 2018 в 03:15

Это сделало трюк:

, чтобы изменить путь к файлу M:\ к точке монтирования в Ubuntu media/MODERNE MUZIEK

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'

, чтобы изменить обратную косую черту для пересылки slashes

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'

Теперь я могу открыть свои ex-windows m3u-файлы с помощью VLC-плеера в Ubuntu. Он играет независимо от того, сколько пробелов или странных символов находится в имени файла.

Возможно ли это улучшить? это можно сделать с помощью grep, чтобы сделать его условным, как в моей первой неудачной попытке? Почему grep не работает?

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

1
ответ дан 6 August 2018 в 03:15

Окончательно я нашел ответ:

grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'

Мне пришлось добавить -Z, чтобы следить за чтением каждого имени файла, а не всей связью в одной длинной строке.

3
ответ дан 7 August 2018 в 20:56

Это сделало трюк:

, чтобы изменить путь к файлу M:\ к точке монтирования в Ubuntu media/MODERNE MUZIEK

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'

, чтобы изменить обратную косую черту для пересылки slashes

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'

Теперь я могу открыть свои ex-windows m3u-файлы с помощью VLC-плеера в Ubuntu. Он играет независимо от того, сколько пробелов или странных символов находится в имени файла.

Возможно ли это улучшить? это можно сделать с помощью grep, чтобы сделать его условным, как в моей первой неудачной попытке? Почему grep не работает?

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

1
ответ дан 7 August 2018 в 20:56

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

Похожие вопросы: