首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要一些帮助来批量过滤行

我需要一些帮助来批量过滤行
EN

Stack Overflow用户
提问于 2012-12-27 03:30:51
回答 4查看 243关注 0票数 2

我有一个文本文件,其中包含以下内容

代码语言:javascript
复制
Pool        p c Dev   Dev             Total  Enabled     Used     Free   a   b
------------ - - ----- ------------ -------- -------- -------- -------- --- ---
FC100        T F FBA   RAID-3(1+1)   13849.1  13849.1  13119.4   7292.0   0 Ena
SATA500      T S FBA   RAID-3(1+1)   50019.2  50019.2  46974.5   3044.9 Ena   0

我希望显示文件中的extract FC100和SATA500,因为这两行包含"Ena“。我几乎没有批处理脚本的经验,所以用我有限的知识,我想出了以下脚本。

代码语言:javascript
复制
@ECHO OFF
setlocal enabledelayedexpansion

FOR /F "tokens=1,* delims= " %%a in (list.txt) DO (
    if "%%b" NEQ "" (

        set string=%%b
        set substring= Ena

        echo !string! |findstr "!substring!" > nul
        if errorlevel 1 (
            rem echo !SubString!
        ) else (
            echo %%a
        )
    )
)

上面的代码所发生的事情是,我得到了所需的输出,但我也得到了Pool,因为该行包含Ena in Enabled。如何提取只包含Ena且与Enabled不匹配的行。

电流输出

代码语言:javascript
复制
Pool
FC100
SATA500

我试着在findstr中使用一些正则表达式魔法,但对我不起作用。注意-我可以用Perl解决这个问题,但不幸的是,我不能在系统上安装Perl,所以我必须批量安装。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-27 04:47:04

您可能希望将Ena作为一个完整的单词进行匹配。要做到这一点,你可以用\<\>括起你的搜索词,也就是像这样改变substring赋值:

代码语言:javascript
复制
set "substring=\<Ena\>"

顺便说一句,在循环的每次迭代中,可能不需要将substring赋给相同的值。你只能在循环之前赋值一次。

票数 2
EN

Stack Overflow用户

发布于 2012-12-27 04:16:06

代码语言:javascript
复制
@echo off
for /F "skip=1" %%a in ('findstr /C:" Ena" list.txt') do (
   echo %%a
)

EDIT:新的解决方案,可以在任何部分使用"Ena“字符串精确地查找线条

代码语言:javascript
复制
@echo off
for /F %%a in ('findstr /R /C:"\<Ena\>" list.txt') do (
   echo %%a
)
票数 3
EN

Stack Overflow用户

发布于 2012-12-27 03:58:56

试试这个:

代码语言:javascript
复制
set substring="Ena[^a-zA-Z]"

[^a-zA-Z]指示findstr不要使用在Ena之后包含字母的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14045275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档