sed文件删除前导文本



我已经试着让它工作了一段时间。。。这个问题有帮助,但我仍在努力让它发挥作用。我宁愿不安装自制软件,因为这是我现在正在执行的一项罕见任务。

我有几千个文件,其中有一串文本、一个下划线、更多的文本、下划线,最后还有我想保留的重要文件名。尝试使用(*)/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;^.*_;;' 

最新更新