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

[问题求助] 用PS将多行并为一行,合并之前过滤掉不符合要求的行和字符

本帖最后由 5i365 于 2022-3-4 15:02 编辑

想使用PS合并多行,但是想在合并之前过滤掉不符合要求的行和字符, 最好能在第12行之后,用正则替换的方法精简的实现, 求高手指点, 非常感谢!

***过滤规则描述:
1.每行之前和之后的空格要删掉
2.如果一行#开头, 则该行排除掉, 例如下面代码中的第7和第9行
3.如果一行之中有#号, 则从行首向右至第一个#, #和#之后的字符全过滤掉, 如果这个#前有空格则删掉空格,  例如下面代码中的第5和第6和第10行
4.经过上面处理后的所有行连成一行, 行与行之间用空格分隔, 下面的代码已经实现

期待结果
/Z /A /B /C=staa /D=staa /F=staa /H="Administrator" AAA

另外发现一个问题, -split "\r\n" , 有时要改成 -split "\n" 才能生效, 不知有没有更稳的办法
  1. $s = @'
  2. /Z
  3.    /A #中 国
  4. /B
  5.   /C=staa #日本
  6. /D=staa ##美 国
  7. # /E="AD" #台湾
  8.         /F=staa
  9.   # /G="Administrator"
  10. /H="Administrator" #
  11.    AAA
  12. '@ -split "\r\n" -join ' '
  13. $s
复制代码

不能一步到位就多步
  1. $s -replace '(?m)(^\s*#.*$)|(#.*$)','' -replace '\r?\n',' ' -replace '\s+',' '
复制代码
1

评分人数

    • 5i365: 乐于助人,技术牛X技术 + 1

TOP

回复 2# went


    多谢帮忙, 请问最后两个替换, 不能用 ( | ) 这种方式吗?

TOP

本帖最后由 5i365 于 2022-3-4 19:00 编辑

回复 2# went


    我试了一下, 没有这段也可以  -replace '\r?\n',' '  如果不加在什么情况会不稳呢?

TOP

回复 4# 5i365


    不加也行

TOP

回复 5# went


    加上的话, 我还能理解, 就是把回车换行的地方用空格接起来了, 这不加了, 我反而理解不了了   ,能解释下吗?

TOP

-replace '\s+',' '
把一个或多个不可见字符替换成一个空格,包括\r\n和单独的一个\n

TOP

回复 7# went


    多谢大侠指教, 一直以来以为\s 指的是空格, 刚刚百度了一下, 加深了理解

\s是指空白,包括空格、换行、tab缩进等所有的空白,
1

评分人数

TOP

返回列表