You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

命令行中如何从ls输出排除特定符号?含文件名处理示例

命令行提取文件名指定部分的方法

需求1:提取nameX格式的文件名(去除前缀数字+下划线与后缀.pdf)

针对01_name1.pdf这类文件名,可通过以下几种命令行方式提取中间的name1部分:

方法1:Bash参数扩展

利用Bash的字符串截取特性,分步移除不需要的内容:

for file in *.pdf; do
  trimmed="${file#*_}"  # 移除从开头到第一个下划线的内容,得到name1.pdf
  echo "${trimmed%.pdf}"  # 移除末尾的.pdf后缀,得到name1
done

方法2:Sed正则替换

通过正则匹配捕获目标内容:

ls *.pdf | sed 's/^.*_\(.*\)\.pdf/\1/'

解释:正则^.*_\(.*\)\.pdf匹配整个文件名,仅保留_和.pdf之间的内容作为输出。

方法3:Awk字段分割

以下划线和点作为分隔符,直接提取目标字段:

ls *.pdf | awk -F '[_.]' '{print $2}'

解释:-F '[_.]'指定分隔符为_或.,文件名会被分割为01、name1、pdf三个字段,打印第二个字段即可。

需求2:仅排除文件名前3个字符

如果只需要移除文件名的前3个字符(比如将01_name1.pdf转为name1.pdf),可使用以下方法:

方法1:Bash参数扩展

利用字符串偏移截取从第4个字符开始的内容:

for file in *.pdf; do
  echo "${file:3}"
done

解释:${file:3}表示从索引3(Bash字符串索引从0开始)的位置截取到末尾。

方法2:Sed正则替换

匹配开头3个任意字符并替换为空:

ls *.pdf | sed 's/^...//'

解释:^...匹配字符串开头的3个任意字符,替换后即得到移除前3个字符的结果。


内容的提问来源于stack exchange,提问作者kubrickian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:16:34