我有一些基於 Windows 的.m3u播放清單 - 它們以..\..\
和 has開頭\
,而不是資料夾路徑,而 Ubuntu 更喜歡它們以(即絕對路徑)/
開頭。/media/usr/part/dir/
我想進行以下更改
- 全部替換
..\..\
為/media/usr/part/dir/
- 全部替換
\
為/
我嘗試find /home/user/directory -name \*.m3u -exec sed -i "s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g" {} \;
按照建議使用這裡,並按照建議嘗試使用_
和:
作為分隔符這裡。
然而,我不斷得到
sed: -e expression #1, char 36: unterminated `s' command
如何在我的文件中進行必要的替換?
答案1
s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g
這個命令是錯誤的,因為它在第一個之前sed
缺少一個,這導致前面的命令將其作為文字轉義(更改模式並“吃掉”分隔符),並且為了替換每行上的單個出現,末端有過多的開關;無論如何,它都缺少用字元部分替換字元的過程。\
/
\
/
..\..\
g
\
/
改用這個;我冒昧地更改了分隔符,以擺脫可能突然發生的情況牙籤傾斜綜合症並進行更改;
以+
提高命令在大量文件上的效能:
find /home/user/directory -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
輸出:
~/tmp$ cat playlist1.m3u
..\..\path1
stuff
..\..\path2\path2
stuff
..\..\path3\path3\path3
stuff
~/tmp$ find . -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
~/tmp$ cat playlist1.m3u
/media/usr/part/dir/path1
stuff
/media/usr/part/dir/path2/path2
stuff
/media/usr/part/dir/path3/path3/path3
stuff