【问题标题】:Script/Command (command line based or PowerShell) to delete an entire line containing a particular string value脚本/命令(基于命令行或 PowerShell)删除包含特定字符串值的整行
【发布时间】:2016-07-24 21:13:20
【问题描述】:

我正在寻找可以在 Windows 操作系统上使用的命令或任何脚本,以从 *.txt 或 *.csv 文件中删除整行。

案例:我有一个名为 abc.csv 的文件,其中包含以下几行。我想删除所有包含.dllvolume 的行。

abc.csv

value.dll
setup.exe
installer.exe
setup.dll
volume serial
serial

执行脚本/命令后,我希望 abc.csv 只剩下下面几行

输出文件(abc.csv

setup.exe
installer.exe
serial

请建议如何做到这一点?

【问题讨论】:

    标签: powershell batch-file vbscript


    【解决方案1】:

    批处理文件解决方案:

    @echo off
    if not exist "abc.csv" goto :EOF
    %SystemRoot%\System32\findstr.exe /I /V /C:".dll" /C:"volume" "abc.csv" >"%TEMP%\abc.csv"
    move /Y "%TEMP%\abc.csv" "abc.csv"
    

    findstr 行在文件abc.csv 中搜索.dllvolume/I 不区分大小写(忽略大小写)并输出/V(反转)所有不包含这两个字符串之一的行。

    也许更适合第三行:

    %SystemRoot%\System32\findstr.exe /I /R /V /C:"\.dll$" /C:"^volume" "abc.csv" >"%TEMP%\abc.csv"
    

    现在使用正则表达式 .dll 必须在行尾找到,volume 必须在行首找到才能在输出时忽略该行。

    要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

    • echo /?
    • findstr /?
    • goto /?
    • if /?
    • move /?

    另请阅读有关 Using command redirection operators 的 Microsoft 文章。

    【讨论】:

    • 感谢 Mofi 的详细解释。您的回复已回答并解决了我的问题。
    【解决方案2】:

    这里是使用 Ruby 从命令行运行的单行脚本

    ruby -ne 'print unless $_[/unwanted/]' < file.txt
    

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多