找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 16282|回复: 4

[问题求助] powershell 截断行后倒序合并多行

[复制链接]
发表于 2022-7-19 17:28:05 | 显示全部楼层 |阅读模式
$s变量包含多行字符串, 如果最后一行包含#号, 则截断为两行,
然后把所有行倒序合并, #号截断的右半部分,接到最后, 下面代码有详细注释,

刚学Powershell 没有思路, 求高人指点, 多谢!
  1. $s= @'
  2. 我是首行
  3. 我是第二行
  4. 我是尾行 #中国 #美国
  5. '@

  6. #1.如果$s变量的尾行中包含#号,则从第一个#号处,截断为两行, 右半部分下面要用到

  7. #2.倒序合并$s变量的所有行,行与行之间有个空格! 注意: 上边#号截断的右半部分,要接到最后
  8. #结果应输出为:
  9. #我是尾行 我是第二行 我是首行 #中国 #美国
复制代码
发表于 2022-7-19 22:45:03 | 显示全部楼层
本帖最后由 flashercs 于 2022-7-19 23:03 编辑
  1. $arr = $s -split '\n'
  2. $x, $y = $arr[-1] -split '(?=#)', 2
  3. $arr = @(
  4.   if ($null -ne $y) { $y }
  5.   $arr | Select-Object -SkipLast 1
  6.   $x
  7. )
  8. [array]::Reverse($arr)
  9. $arr -join ' '
复制代码

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 高手

查看全部评分

 楼主| 发表于 2022-7-20 09:55:40 | 显示全部楼层
本帖最后由 小白龙 于 2022-7-20 09:56 编辑

回复 2# flashercs


  多谢大侠, 我改了一下代码, 想请教一下,
红色字部分, 改成C#函数后, 截断后, 中国前的#会丢失
蓝色字部分, 这样反过来表达, 有不妥吗?

$s = @'
我是首行
我是第二行
我是尾行 #中国 #美国
'@

$arr = $s -split '\n'
#$x, $y = $arr[-1] -split '(?=#)', 2
$x, $y = ($arr[-1]).split('(?=#)', 2)
$arr = @(
  if ($y -ne $null) { $y }
  $arr | Select-Object -SkipLast 1
  $x.trim()
)
[array]::Reverse($arr)
$arr -join ' '
 楼主| 发表于 2022-7-20 10:09:24 | 显示全部楼层
下面的示例, 也没有保留分隔符 ,
另外, 有什么办法, 清理每段前后的空格吗? 下面例子, 截断后的第二三行前空格

$Record = 'Name : YY,   Age:22,   Details: "Hello, testing purpose"'
$Record.split(",", 3)
发表于 2022-7-20 14:25:16 | 显示全部楼层
-split 是powershell 操作符 默认是正则分割
.split是字符串分割
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:25 , Processed in 0.015589 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表