string - 在powershell脚本中替换字符串中的子字符串
问题描述
我有很长的文本文件,其中包含另一个软件的标记。文本的形式是这样的:
*INIT=D:\ws\**randomnonesense*
ROW=THISISROW,D:\ws\morestuff
PALVELU=200,WSTIME70.DLL,N,A
PALVELU=201,WSLDIR70.DLL,N,A
PALVELU=202,WSLDIX70.DLL,N,A
PALVELU=204,WSEXCE32.DLL,N,A
PALVELU=205,WMON.DLL,N,A
PALVELU=206,WSWORD32.DLL,N,A
PALVELU=207,WSLEPT32.DLL,N,A
PALVELU=208,WSCONV70.DLL,N,A
PALVELU=209,WSFTPC70.DLL,N,A
KUVAUS=\\192.168.169.17\adwise$\applic\LIKSA_TURE.A70,D:\ws\%aspno%\%username%
MDBS-KANTA=LIKSAV,%aspno%LIK.DB,5,RTTL,ANSI,111.111.111.11MDBS-
KANTA=LANKA,%aspno%LAN.DB,5,RTTL,ANSI,1000.000.111.11
我正在编写一个脚本,它需要替换所有以 PALVELU 开头的行。这些行之前和之后的其他东西的数量可以是任意的。在每个文件中,这些 PALVELU 行的数量或它们的长度也不相同。我仍然需要用另一组行替换每个文件中的所有这些行。有没有办法做到这一点?
解决方案
如果目标是用新行替换每一PALVELU
行,您可以执行以下操作:
# Assumes your file is a.txt
$ReplaceThis = '^PALVELU.*$'
$ReplaceWith = '<new row>'
$(switch -regex -file a.txt {
$ReplaceThis { $_ -replace $ReplaceThis,$ReplaceWith }
Default { $_ }
}) | Set-Content a.txt
上面的代码将导致 X number of PALVELU
rows 被 X number of 替换<new row>
。
如果目标是在仅包含一组连续行的文件PALVELU
中用单个字符串替换连续行,您可以执行以下操作:<new row>
PALVELU
$ReplaceThis = '(?sm)^PALVELU.*(?-s)^PALVELU.*$'
$ReplaceWith = '<new row>'
(Get-Content a.txt -Raw) -replace $ReplaceThis,$ReplaceWith |
Set-Content a.txt
如果目标是在第一行的位置PALVELU
用单个<new row>
字符串替换所有行,PALVELU
并且这些行可以位于文件中的任何位置,您可以执行以下操作:
$ReplaceThis = '^PALVELU.*$'
$ReplaceWith = '<new row>'
$firstMatch = $false
$(switch -regex -file a.txt {
$ReplaceThis {
if ($firstMatch) {
$_ -replace $ReplaceThis
}
else {
$_ -replace $ReplaceThis,$ReplaceWith
$firstMatch = $true
}
}
default { $_ }
}) -ne '' | Set-Content a.txt
推荐阅读
- html - React 组件上的自定义 HTML 属性
- reactjs - 在 React/react-admin 中将“记录”属性设置为来自 API 调用的响应数据
- apache-flink - 根据 Flink 中的模式使用 GCS 文件
- c++ - 从标头生成 gSOAP 文件时定义无法识别
- azure-cosmosdb - 为什么单个区域的写入操作要收费 5 RU?这同样适用于我选择的任何 cosmosdb API 吗?
- typescript - 泛型类型的类型推断
- java - 在java中使用递归打印数字而没有最大数字
- javascript - React-native 创建库“null 不是对象(评估 '_reactNativeStartappAds.default.showMessage')”
- url - 如何创建链接以直接编辑 SharePoint 列表项
- android - 长按编辑文本时限制/删除自动填充选项