在 powershell 中对管道使用 -replace

在 powershell 中对管道使用 -replace

我想在使用之前先测试一下替换,所以我试着写一个快速的在线命令来查看输出结果。但是,我不确定语法是什么。我想做的是

cat file | -replace "a", "b"

这个正确的 powershell 语法是什么?

我知道我也可以这样做$a = cat file,然后进行替换$a,但我想把它放在一行上

答案1

这应该可以解决问题,它将遍历文件中的所有行,并将任何“a”替换为“b”,但之后您需要将其保存回文件中

cat file | foreach {$_.replace("a","b")} | out-file newfile

答案2

要使用Powershell -replace 运算符(与正则表达式一起使用)执行以下操作:

cat file.txt | foreach {$_ -replace "\W", ""} # -replace operator uses regex

请注意,-replace 运算符使用正则表达式匹配,而以下示例将使用非正则表达式文本查找和替换,因为它使用.NET Framework 的 String.Replace 方法

cat file | foreach {$_.replace("abc","def")} # string.Replace uses text matching

答案3

我想增加使用上述解决方案的可能性作为命令管道的输入这需要斜线代替反斜线

我在使用时遇到了这个问题笑话在 Windows 下,jest 需要斜杠,而 Windows 路径自动完成功能会返回反斜杠:

.\jest.cmd .\path\to\test  <== Error; jest requires "/"

相反,我使用:

.\jest.cmd (echo .\path\to\test | %{$_ -replace "\\", "/"})

其结果是

.\jest.cmd ./path/to/test

甚至多条路径可以使用数组进行“转换” (echo path1, path2, path3 | ...)。例如,为了指定配置文件,我使用:

.\jest.cmd --config (echo .\path\to\config, .\path\to\test | %{$_.replace("\", "/")})

.\jest.cmd --config ./path/to/config ./path/to/test

好消息是,您仍然可以使用本机路径自动完成功能来导航到您的文件。

相关内容