我在OSX上有一個文件夾,其中包含從在線DVR下載的電視節目。我想製作一個節目清單並將其格式化爲與另一個清單相匹配以供比較。使用sed在bash腳本中進行就地重命名
當我在shell中運行以下命令時,一切正常,我得到我想要的列表。
ls *.mp4 > loaded_shows.txt
sed -i$0 's/\(.*\)_/\1\ /' loaded_shows.txt
sed -i$0 's/\(.*\)_/\1\ /' loaded_shows.txt
sed -i$0 's/\(.*\)_/\1\ /' loaded_shows.txt
cat loaded_shows.txt
當我把同樣的命令放到一個bash腳本,sed中給出了每個即使腳本是在同一目錄中的文件是就地更換以下錯誤消息。
sed的:重命名():沒有這樣的文件或目錄
以及物品是否完整,這裏的bash腳本:
#!/bin/bash
ls *.mp4 > loaded_shows.txt
sed -i$0 's/\(.*\)_/\1\ /' loaded_shows.txt # replace last _ with space
sed -i$0 's/\(.*\)_/\1\ /' loaded_shows.txt # again replace last _ with space
sed -i$0 's/\(.*\)_/\1\ /' loaded_shows.txt # remove the file extension
cat loaded_shows.txt
而且樣本輸入文件名:
666_Park_Avenue_2014-04-22_23.35.mp4
Americans_2014-04-20_22.45.mp4
Scandal_2014-04-20_21.00.mp4
The_Voice_of_USA_2014-04-22_19.30.mp4
我怎樣才能讓sed在bash腳本中工作?
你如何運行Bash腳本?它是否還創建loaded_shows.txt? – AsksAnyway
我發現我做錯了。問題在於-i參數的格式。 我在沒有進一步解釋的情況下看到了這個例子。我嘗試了幾種告訴sed不要備份文件的方法,-i $ 0是我發現的唯一一個似乎適用於OSX的例子。在發佈這個問題之後閱讀了更多內容之後,我意識到-i $ 0在腳本中不起作用。 我用-i''替換它(之間的空格),現在腳本工作並創建loaded_shows.txt。 一些示例建議使用-i「(無間隔),它不適用於OSX。 – user83156
你打敗了我。我建議'-i .bak'作爲參數。 「$ 0」可能工作;它是腳本的名稱,但是如果它包含'$ 0'中的路徑信息,那麼就會被洗掉。 –