gpt4 book ai didi

arrays - Powershell - 删除基于静态数组的多行文本?

转载 作者:行者123 更新时间:2023-12-02 00:02:16 25 4
gpt4 key购买 nike

编辑:2013 年 12 月 19 日

我未能正确定义可能造成混淆的输入,对此深表歉意。输入文件是 IIS 日志,其格式需要保持不变。字段看起来像这样; “字段:日期时间 s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-状态耗时"

一个 url GET 会显示这样的东西;

2013-12-07 00:23:50 XXX.XXX.XXX.XXX POST/code=5071 80 - XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+8.0;+ Windows+NT+5.1;+Trident/4.0;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4 .0E) http://blah.blah.com/?code=5071 200 0 64 3478

“code=5071”帮助我们识别一个 url,如果我们去掉所有其他的 url,我们可以运行一个统计实用程序并找出有多少次点击,等等。


那么,在编码方面我完全是个新手,所以请随意 mock 。我正在尝试获取一个日志文件并根据多个变量删除行,我想我可以创建一个数组,这样如果需要删除或添加一个数字,就只有一个文件可以编辑。输入文件是一个简单的日志,其中包含几个字段,其中一个是“ID”之类的东西; ddmmyy blah blah ID。 ID 是一个十位数字,其中有三十七位。目的是读取日志,去除所有不匹配的 ID,然后将结果输出到新的日志文件。

这段代码工作正常,但在它停止之前我似乎只能输入大约十四个“-And”

Get-Content .\combined.log | Where-Object{$_-NotMatch '10011250' -And $_-NotMatch '10005816' -And $_-NotMatch '5077'} |Set-Content combined1.log

我在网上搜索并尽可能多地学习数组,但似乎没有任何效果,我知道这是我的问题,我知道我是如何设置它的。我认为这样的事情可能会奏效;

$a = @(10011250, 10005816, 14200712, 2418, 10005699, 5071, 10001040, 4814, 10025390, 4175, 10005940, 10000040, 10008181)
Get-Content .\combined.log | ForEach($i in $a) {Where-Object{$_-notcontains $a}}| Set-Content combined1.log

如您所知,这绝不是我的专业领域。有什么建议吗?

最佳答案

您可以在正则表达式中使用交替在同一个匹配操作中测试多个值。使用竖线符号 (|) 分隔要匹配的多个值。

Get-Content .\combined.log | Where-Object{$_-NotMatch '10011250|10005816'}

将过滤掉所有匹配 10011250 或 10005816 的行。
此外,-match 运算符将一次匹配整个数组,并返回满足条件的成员。

试试这个:

$a = @(10011250, 10005816, 14200712, 2418, 10005699, 5071, 10001040, 4814, 10025390, 4175, 10005940, 10000040, 10008181)

$regex = [regex]($a -join '|')

Get-Content .\combined.log -ReadCount 1000 |
foreach {$_ -notmatch $regex | Add-Content combined1.log}

培根:

$lines = (
'Line containing 10011250',
'Line containing 10005816',
'Line containing 10011250',
'Line containing 10915816'
)

$lines -notmatch '10011250|10005816'

Line containing 10915816

关于arrays - Powershell - 删除基于静态数组的多行文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com