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

[问题求助] PowerShell用替换法删除空行的问题

下面的第二行代码执行后成功将文本内部的空行删除,但第一行不生效? 请高手指教! 多谢!!
另外, 第二行代码处理后最结尾会有两行空行, 我用第三行的代码, 执行后还是有一个空行, 能修改下正则把最后的两行也顺便删除吗?

(gc A.txt ) -replace "\s+\r\n+" | Out-File "b.txt"

[IO.File]::ReadAllText("A.txt") -replace '\s+\r\n+' | Out-File "b.txt"

([IO.File]::ReadAllText("A.txt") -replace '\s+\r\n+').Trim() | Out-File "b.txt"
-------------------------------------------------------------------------------------------------------------
刚发现一个问题, 第二行代码能删除空行, 但是下面的文字替换后,#1跑到了第一行的最后,感觉正则可能还需要改一下
-----------------------------------------
长夜未央的陪在我的身边


#1
阿衣妞妞
嗯海马塔莎洛
让风吹**脸上的泪痕
逝去的爱
不必再留恋

gc返回的是数组
换行符都被替换没了,是不是要补一个回去
-replace '\s+\r\n',"`r`n"

TOP

回复 2# idwma


    大侠牛X, 【#1跑到了第一行的最后】 这个问题解决了, 但是还有个小问题, 原文本中最后一行没有空行, 但是执行后, 会多个空行, 好像输出的命令都有这个问题  加了 .Trim()也不行

TOP

本帖最后由 idwma 于 2022-3-2 12:11 编辑
  1. https://stackoverflow.com/questions/45266461/set-content-appends-a-newline-line-break-crlf-at-the-end-of-my-file
复制代码
找了一下感觉这个字节转换方法以后还可以用在别的地方
  1. [Text.Encoding]::default.GetBytes($((gc a.txt) -join "`r`n" -replace '\s+\r\n',"`r`n")) | sc -enc byte b.txt
复制代码

TOP

本帖最后由 5i365 于 2022-3-2 18:44 编辑

回复 4# idwma

感谢大侠支招,  这回真是完美了

另外还是有一点缺憾, a.txt的编码还是得用您以前写的那段ps识别一下, 感觉还是稍有点长   ,

went大侠的Coder, 能自动转任意编码的文本为UTF8, 且都不乱码, 然后我就能在PS脚本的最开头, 设置默认读和写的编码都为UTF8, 这样不会出任何乱码问题

用您刚才出的招, 能曲线实现吗?  我结根结底, 是想要UTF8 不带Bom的最终文本【用[IO.File]::WriteAllLines】, 但是源文本, 又是各种的编码格式

如果一两行代码, 手改一下没什么, 如果代码长了, 里面的读文本的地方都得加编码格式, 不然就乱码

TOP

回复 4# idwma


    好像又问题了, 下面这个文件, 是utf8带bom的, 直接用上面的代码输出报错, 但我看上面代码设为了byte格式, 那怎样最终得到UTF8的文本?
https://send.cm/d/99LA

TOP

还是用went神的那个判断函数好,比较通用
代码有多长?可以看一下吗

TOP

回复 7# idwma

嗯, 看来还是要在执行gc前加个判断稳, 我是做假设, 以后打算拼几个代码,组装一下, 编码换来换去很烦人

TOP

回复 7# idwma


    怎样把went大侠的检测编码的ps代码,搞成一个函数, 然后在循环里使用它, 能写个例子吗? 比如把当前目录下的所有txt文件,转成 UTF8不带bom格式的txt

TOP

原贴里不是有例子了吗

TOP

回复 10# idwma


  在处理循环时, 遇到点问题, 稍后贴上代码

TOP

返回列表