一直在为此苦苦挣扎,想知道是否有人可以提供帮助。我有一个很大的文本文件,里面有我想要删除的多余数据。以下是输入文件的示例:
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
我想删除以下内容:
- 任何空白行
- 任何位于行首的“
- 以字母 AZ、az 开头的任何行
因此,对于上面的例子,我会得到
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
答案1
我在想:
(gc D:\test.txt) -replace '^"' | sls '\S' | sls -NotMatch '^[A-Za-z]' | sc out.txt
其作用是:
- 获取文件的行,如果第一个字符是引号,则将其替换为空
- 选择与“非空格”匹配的行(即空行被过滤掉)
- 选择不以 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