标题: [文本处理] sed.exe --locale=zh_cn.utf8 -i 不支持带空格的中文文件名 [打印本页]
作者: kidzgy 时间: 2023-8-14 02:03 标题: sed.exe --locale=zh_cn.utf8 -i 不支持带空格的中文文件名
【测 试.txt】UTF8编码(中文名,且有空格)- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title></title>
复制代码
【执行语句】- sed.exe --locale=zh_cn.utf8 -i -r "s#(<title>).*(<\/title>)#\1一二三一二三\2#gi" "测 试.txt"
复制代码
【结果】- 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 - 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:- $a='
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title></title>
- '
-
- [regex]::Replace($a,'(?<=<title>)(?=</title>)','你想修改什么?')
复制代码
bat:- @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
-
-
-
- <#
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title></title>
- #>
复制代码
作者: 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 |