Board logo

标题: [问题求助] powershell 截断行后倒序合并多行 [打印本页]

作者: 小白龙    时间: 2022-7-19 17:28     标题: powershell 截断行后倒序合并多行

$s变量包含多行字符串, 如果最后一行包含#号, 则截断为两行,
然后把所有行倒序合并, #号截断的右半部分,接到最后, 下面代码有详细注释,

刚学Powershell 没有思路, 求高人指点, 多谢!
  1. $s= @'
  2. 我是首行
  3. 我是第二行
  4. 我是尾行 #中国 #美国
  5. '@
  6. #1.如果$s变量的尾行中包含#号,则从第一个#号处,截断为两行, 右半部分下面要用到
  7. #2.倒序合并$s变量的所有行,行与行之间有个空格! 注意: 上边#号截断的右半部分,要接到最后
  8. #结果应输出为:
  9. #我是尾行 我是第二行 我是首行 #中国 #美国
复制代码

作者: flashercs    时间: 2022-7-19 22:45

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

作者: 小白龙    时间: 2022-7-20 09:55

本帖最后由 小白龙 于 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

下面的示例, 也没有保留分隔符 ,
另外, 有什么办法, 清理每段前后的空格吗? 下面例子, 截断后的第二三行前空格

$Record = 'Name : YY,   Age:22,   Details: "Hello, testing purpose"'
$Record.split(",", 3)
作者: flashercs    时间: 2022-7-20 14:25

-split 是powershell 操作符 默认是正则分割
.split是字符串分割




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