我在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'中的路径信息,那么就会被洗掉。 –