尋找並取代目錄中的特殊字符

尋找並取代目錄中的特殊字符

我有一些基於 Windows 的.m3u播放清單 - 它們以..\..\和 has開頭\,而不是資料夾路徑,而 Ubuntu 更喜歡它們以(即絕對路徑)/開頭。/media/usr/part/dir/

我想進行以下更改

  1. 全部替換..\..\/media/usr/part/dir/
  2. 全部替換\/

我嘗試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

相關內容