使用powershell清理文本文件

1 powershell

一直在努力解决这个问题,想知道是否有人可以提供帮助。我有一个很大的文本文件,里面有我想删除的额外数据。这是输入文件的示例:

Text In Page - 1

S
Dept
l<m RKB)
"1915
slightly 234234
"sil dsf 56
"gr
gl
1920 100
1925 100
1930 100 Cls
"1935 100 Cl


Text In Page - 2

l<m RKB)
"1915
slightly
"sil
"gr
glauc
1920 100
1925 100
1930 100 Cls
"1935 100 Cl
Run Code Online (Sandbox Code Playgroud)

我想删除以下内容:

  • 任何空行
  • 任何 " 行首
  • 任何以字母 AZ, az 开头的行

所以有了上面的例子,我就剩下

1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
Run Code Online (Sandbox Code Playgroud)

Tes*_*ler 5

我在想:

(gc D:\test.txt) -replace '^"' | sls '\S' | sls -NotMatch '^[A-Za-z]' | sc out.txt
Run Code Online (Sandbox Code Playgroud)

这样做:

  • 获取文件的行,如果第一个字符是引号,则将其替换为空
  • 选择匹配“非空白”的行(即空行被过滤掉)
  • 选择不以 A-Za-z 开头的行
  • 将结果写入 out.txt

有多种方法可以编写长版本,具体取决于您喜欢将事物与管道链接在一起还是一遍又一遍地使用变量,但它是这样做的:

$lines = Get-Content D:\test.txt
$lines = $lines -replace '^"'
$lines = $lines | Select-String '\S'
$lines = $lines | Select-String -NotMatch '^[A-Za-z]'
$lines | Set-Content out.txt
Run Code Online (Sandbox Code Playgroud)

  • @MathiasR.Jessen 如果您使用 *"删除以 AZ 开头的行"* 的含义与 *"包含以数字开头的行"* 相同,那么您可以删除 `sls'\S'`,因为 `sls' ^\d'` 将过滤掉空行。 (2认同)