regex - 如何在 powershell 中指定特定的文件名?
问题描述
我对powershell很陌生。我有一个 csv 文件,我想用它来查找和替换一些文本。经过一番搜索,这似乎很简单,但我似乎仍然遇到代码问题:
$csv = get-content .\test.csv
$csv = $csv -replace "|", "$"
$csv | out-file .\test.csv
我的文件位于:C:\Users\CB1\test.csv 如何在 powershell 中指定该位置?
我已经尝试过了,但它不起作用:
$csv = get-content C:\Users\CB1\test.csv
$csv = $csv -replace "|", "$"
$csv | out-file C:\Users\CB1\test.csv
解决方案
问题不在于您使用的是相对路径还是绝对路径(假设您的相对路径是相对于正确的目录)。
相反,问题在于-replace
运算符是基于正则表达式的,|
因此被解释为正则表达式元字符(表示交替)。
因此,您需要转义此类元字符,使用\
(或者,如果您要以编程方式执行此操作,则可以使用该[regex]::Escape()
方法)。
此外,由于您的替换操作不是特定于行的,您可以通过使用开关将文件作为一个整体读入内存来加快操作速度。-Raw
反过来,这要求您-NoNewLine
在(重新)写入文件时使用开关。此外,出于性能原因,最好使用文本输入。Set-Content
Out-File
把它们放在一起:
(Get-Content -Raw .\test.csv) -replace '\|', '$' | Set-Content -NoNewLine .\test.csv
注意:-Encoding
根据需要使用参数,因为输入文件的编码将不被接受:
在Windows PowerShell中,
Out-File
默认生成 UTF-16LE(“Unicode”)文件,而Set-Content
使用系统的 ANSI 代码页。在PowerShell (Core) 7+中,无 BOM 的 UTF-8 是一致应用的默认值。
推荐阅读
- php - 页面上的图像计数器
- java - Java多态Json反序列化
- php - 如何在 PHP 中循环遍历多维 JSON 数组?
- python - 使用 pandas 中的矢量化计算值并将结果插入数据帧
- python - 熊猫行操作 - 如果找到 startwith 关键字 - 将行追加到前一行的末尾
- r - R gganimate 没有动画
- javascript - 成功操作通道后的 PUT 操作
- snowflake-cloud-data-platform - 文本上的雪花排序似乎不正确
- javascript - 当涉及滚轮或移动设备时,您如何处理基于滚动的动画?
- ios - 以编程方式更新 UIPageController 的 UIPageControl 当前索引