Board logo

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

作者: kidzgy    时间: 2023-8-14 02:03     标题: 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" 这样是不被支持的
作者: Batcher    时间: 2023-8-14 09:51

回复 1# kidzgy
  1. sed.exe -i -r -e "s#abc#xyz#gi" -e "s#123#321#gi" "1.txt"
复制代码
你用的哪个版本的sed呢?
作者: kidzgy    时间: 2023-8-14 11:23

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



    系统是WIN10 X64,用的是64位4.9版本的sed
作者: wanghan519    时间: 2023-8-14 13:36

试了busybox-w32里的sed,还有git for windows里的sed,没有这个问题
作者: Nsqs    时间: 2023-8-14 14:32

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

作者: kidzgy    时间: 2023-8-15 12:30

回复 4# wanghan519


   
试了一下,Git for Windows的sed无法识别--locale=zh_cn.utf8 这个参数。不知道为什么,同样是4.9版本
作者: kidzgy    时间: 2023-8-15 12:31

回复 5# Nsqs


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2