![如何在 sed 文本替换命令之前使用 grep 进行条件搜索](https://linux22.com/image/1105372/%E5%A6%82%E4%BD%95%E5%9C%A8%20sed%20%E6%96%87%E6%9C%AC%E6%9B%BF%E6%8D%A2%E5%91%BD%E4%BB%A4%E4%B9%8B%E5%89%8D%E4%BD%BF%E7%94%A8%20grep%20%E8%BF%9B%E8%A1%8C%E6%9D%A1%E4%BB%B6%E6%90%9C%E7%B4%A2.png)
我正在尝试更改大量 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 不起作用?
感谢您的意见。