[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

【测 试.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" 这样是不被支持的

回复 1# kidzgy
  1. sed.exe -i -r -e "s#abc#xyz#gi" -e "s#123#321#gi" "1.txt"
复制代码
你用的哪个版本的sed呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  kidzgy 你用的哪个版本的sed呢?
Batcher 发表于 2023-8-14 09:51



    系统是WIN10 X64,用的是64位4.9版本的sed

TOP

试了busybox-w32里的sed,还有git for windows里的sed,没有这个问题

TOP

本帖最后由 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. #>
复制代码

TOP

回复 4# wanghan519


   
试了一下,Git for Windows的sed无法识别--locale=zh_cn.utf8 这个参数。不知道为什么,同样是4.9版本

TOP

回复 5# Nsqs


    感谢解答,感觉powershell还是不好学,所以批处理使用第三方工具轻易能够解决还是挺好的。

TOP

返回列表