找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20998|回复: 6

[文本处理] sed.exe --locale=zh_cn.utf8 -i 不支持带空格的中文文件名

[复制链接]
发表于 2023-8-14 02:03:39 | 显示全部楼层 |阅读模式
【测 试.txt】UTF8编码(中文名,且有空格)
  1. <html>
  2. <head>
  3.         <meta http-equiv="content-type" content="text/html; charset=utf-8">
  4.         <title></title>
复制代码
【执行语句】

  1. sed.exe --locale=zh_cn.utf8 -i -r "s#(<title>).*(<\/title>)#\1一二三一二三\2#gi" "测 试.txt"
复制代码
【结果】
  1. sed.exe: cannot rename ./sedKh68j2: Operation not permitted
复制代码


但如果去除【-i】参数,整条语句改为:【sed.exe --locale=zh_cn.utf8  -r "s#(<title>).*(<\/title>)#\1一二三一二三\2#gi" "测 试.txt"  > "测 试_new.txt"】 这样就没有问题。
但如果保留【-i】等参数,仅将【测 试.txt】的文件名去除空格,则会生成带有乱码的文件名【娴嬭瘯.txt】,哪怕chcp 65001依旧如此。
但如果文件名【测 试.txt】改为不带中文名,则完全没有上述的问题。

不知道是什么原因导致上面的问题,算不算是sed的BUG呢?

另外想请教一下,带参数【-i】时,支持单行命令带多个正则表达式替换吗?比如 sed.exe -i -r "s#abc#xyz#gi" -r "s#123#321#gi" "1.txt" 这样是不被支持的
发表于 2023-8-14 09:51:38 | 显示全部楼层
回复 1# kidzgy
  1. sed.exe -i -r -e "s#abc#xyz#gi" -e "s#123#321#gi" "1.txt"
复制代码
你用的哪个版本的sed呢?
 楼主| 发表于 2023-8-14 11:23:32 | 显示全部楼层
回复  kidzgy 你用的哪个版本的sed呢?
Batcher 发表于 2023-8-14 09:51



    系统是WIN10 X64,用的是64位4.9版本的sed
发表于 2023-8-14 13:36:17 | 显示全部楼层
试了busybox-w32里的sed,还有git for windows里的sed,没有这个问题
发表于 2023-8-14 14:32:47 | 显示全部楼层
本帖最后由 Nsqs 于 2023-8-14 14:33 编辑

用PowerShell替换不好么?

PowerShell:
  1. $a='
  2. <html>
  3. <head>
  4.         <meta http-equiv="content-type" content="text/html; charset=utf-8">
  5.         <title></title>
  6. '

  7. [regex]::Replace($a,'(?<=<title>)(?=</title>)','你想修改什么?')
复制代码
bat:
  1. @echo off&powershell -noprofile -ExecutionPolicy ByPass "function read($skip){((gc '%~0')-split '\n'|select -Skip $skip|Out-String)};$line=[regex]::Matches((read 1),'<#').index-1;read $line|%%{[regex]::Replace($_,'(?<=<title>)(?=</title>)','你想修改什么?')}"&pause&exit



  2. <#
  3. <html>
  4. <head>
  5.         <meta http-equiv="content-type" content="text/html; charset=utf-8">
  6.         <title></title>
  7. #>
复制代码
 楼主| 发表于 2023-8-15 12:30:26 | 显示全部楼层
回复 4# wanghan519


   
试了一下,Git for Windows的sed无法识别--locale=zh_cn.utf8 这个参数。不知道为什么,同样是4.9版本
 楼主| 发表于 2023-8-15 12:31:25 | 显示全部楼层
回复 5# Nsqs


    感谢解答,感觉powershell还是不好学,所以批处理使用第三方工具轻易能够解决还是挺好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 15:34 , Processed in 0.015952 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表