如何在 sed 文本替换命令之前使用 grep 进行条件搜索

如何在 sed 文本替换命令之前使用 grep 进行条件搜索

我正在尝试更改大量 m3u 文件中的路径。我知道我可以使用 regexxer fe 来做到这一点,但我正在尝试学习 bash。

这是我弄清楚的命令,但它不起作用。

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

我怀疑,但只是怀疑,这是由于文件名中的特殊字符造成的。如何处理?

答案1

最后我找到了答案:

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

我必须添加 -Z 以确保读取每个文件名,而不是将整个文件名读取到一个长字符串中。

答案2

这招奏效了:

在 Ubuntu 中将Windows 路径更改M:\为挂载点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'

现在我可以用 Ubuntu 中的 VLC 播放器打开我以前的 Windows m3u 文件。
无论文件名中有多少空格或奇怪的字符,它都可以播放。

可以改进吗?可以grep像我第一次失败的尝试一样,使它具有条件性吗?为什么 grep 不起作用?

感谢您的意见。

相关内容