我已经试着让它工作了一段时间。。。这个问题有帮助,但我仍在努力让它发挥作用。我宁愿不安装自制软件,因为这是我现在正在执行的一项罕见任务。
我有几千个文件,其中有一串文本、一个下划线、更多的文本、下划线,最后还有我想保留的重要文件名。尝试使用(*)/1/
删除第一个*_*_
并保留最后一个具有文件扩展名的部分。
我尝试了几种不同的方法,得到的只是原始文件名再次被吐出。感谢您的帮助。-不确定是regex问题,还是sed问题,或者两者都有。
ls | sed 's/^*_*_(*)/1/' > ouput.txt;
ls | sed 's/^*_*_(*$)/1/' > out.txt
ls | sed 's/(^*_*_)(*$)/2/' > out.txt
ls | sed 's/(^.*_+.*_+)(.*$)/mv & 2/' > out.txt
这个正则表达式能起作用吗?如果没有,请报告它的输出是如何关闭的(详细信息),我会帮你调整它。
ls -1 | sed -e 's/^[^_]*_[^_]*_//'
注意1:您可能希望使用ls -1
将文件格式化为单列。
注意2:上面的方法只是删除文件名中不需要的部分,而不是试图将您想要的部分存储在regex缓冲区中。
编辑
下面是一个执行重命名的bash脚本。
for f in `ls -1`
do
new_name=`echo "$f" | sed 's/^[^_]*_[^_]*_//'`
mv "$f" "$new_name"
done
可以写成一行,但我追求的是清晰而非简洁。
command | sed 's;^.*_;;'
将发挥作用。使用find
命令而不是ls
。
例如,
find . -type f | sed 's;^.*_;;'