我创建了一个文件
echo "test 1", Hello, foo, bar, world, "test 2" > test.txt
结果是这样的
test 1
Hello
foo
bar
a better world
test 2
我需要删除所有以关键字"Hello"开头并以"world"结尾的文本,包括这两个关键字。
就像这样
test 1
test 2
我试过了
$pattern='(?s)(?<=/Hello/\r?\n).*?(?=world)'
(Get-Content -Path .\test.txt -Raw) -replace $pattern, "" | Set-Content -Path .\test.txt
但什么都没发生我能试试吗
3条答案
按热度按时间w8rqjzmb1#
假设您想删除开始和结束关键字,您可以使用
(?s)\s*Hello.*world
或(?s)\s*Hello.*?world
,这取决于您希望.*
是 greedy 还是 lazy。使用
-creplace
进行区分大小写的关键字匹配。5n0oy7gb2#
先不考虑正则表达式中有多余的
/
,将其重新表述如下:对Santiago Squarzon的提示。这将删除以
Hello
开头的行,一直到以world
结尾的(第一个)后续行,包括下一个换行符。这将产生所需的输出,如您的问题所示。至于你所尝试的:
除了多余的
/
字符之外,您的主要问题是您正在使用 *look-aroundAssert *((?<=...)
,(?=...)
),这导致它们匹配的内容 not 被捕获为整个匹配的一部分,因此 not 被-replace
替换。brvekthn3#
我认为这是与How can I deleted lines from a certain position?或任何包含的其他副本的副本: