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

Bash下移除文件名中尾随的UTF-8十六进制表情符号编码

移除文件名末尾的UTF-8 URL编码表情符号

核心思路

这些尾随的表情符号编码是4字节UTF-8字符对应的URL编码(比如😍转为%f0%9f%98%8d),表现为连续的%[0-9a-fA-F]{2}格式串且位于文件名末尾。我们可以通过正则匹配并删除末尾所有这类连续编码。

可行命令示例

1. Sed 命令(GNU/BSD 通用)

使用扩展正则匹配末尾的连续URL编码片段:

# 处理单个字符串
echo "broadcast_file%f0%9f%98%8d" | sed -E 's/%[0-9a-fA-F]{2}+$//'

# 批量重命名文件
for file in *; do
  new_name=$(echo "$file" | sed -E 's/%[0-9a-fA-F]{2}+$//')
  [ "$file" != "$new_name" ] && mv "$file" "$new_name"
done

2. Perl 命令

Perl正则支持忽略大小写匹配,适配大小写混合的URL编码:

echo "broadcast_file%F0%9F%98%8D" | perl -pe 's/%[0-9a-f]{2}+$//i'

3. Awk 命令

通过sub函数替换末尾的目标编码:

echo "broadcast_file%f0%9f%98%8d" | awk '{sub(/%[0-9a-fA-F]{2}+$/, "")}1'

注意事项

  • 上述命令仅匹配末尾的连续编码片段,不会误删文件名中间合法的URL编码(比如%20表示空格)。
  • 若需精准匹配Emoji专属UTF-8编码范围(如U+1F600至U+1F64F),可使用更严格的正则,但仅覆盖部分Emoji,通用场景下推荐第一种方法:
    sed -E 's/%f0%9[0-9a-f]%[89ab][0-9a-f]%[89ab][0-9a-f]$//i'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:01:03