找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 95018|回复: 19

[文本处理] [已解决]批处理如何删除首次同时出现多个字符串的行?

[复制链接]
发表于 2019-1-14 21:00:09 | 显示全部楼层 |阅读模式
本帖最后由 meiszp 于 2019-1-21 21:40 编辑

文本里有多行同时包含“BENDE”和“LASTF ”字符串,希望删除首次同时出现这两个字符串的行。


贴个代码
  1. @echo off
  2. set "filename=test.txt"
  3. cd.>tmp$
  4. for /f "tokens=1* delims=:" %%a in ('findstr /n .* %filename%') do (
  5. echo "%%b"|findstr "LASTF"|findstr "BENDE">nul&& (set n=%%a&goto :next)
  6. echo.%%b >>tmp$
  7. )
  8. :next
  9. more +%n% %filename% >>tmp$
  10. move tmp$ %filename%
复制代码
发表于 2019-1-14 22:39:21 | 显示全部楼层
本帖最后由 ivor 于 2019-1-15 17:13 编辑

  1. $filename = "C:\Users\mac\Desktop\a.txt"
  2. ([regex]$pattern='(?=.*BENDE)(?=.*LASTF).*\r?\n?').replace([IO.File]::ReadAllText($filename),'',1) | set-content $filename
复制代码

评分

参与人数 2技术 +2 收起 理由
CrLf + 1
yhcfsr + 1 大开眼界.

查看全部评分

发表于 2019-1-15 12:31:57 | 显示全部楼层
本帖最后由 yhcfsr 于 2019-1-15 12:47 编辑

回复 2# ivor

想不到正则表达式也能调用replace方法.
还有许多函数不知道用法,不知道是不是姿势不对,帮助文档没给我多少帮助.
求大佬指点学习方法.
发表于 2019-1-15 12:38:26 | 显示全部楼层
回复 2# ivor


    卧槽!!代码框左上角那个黑绿黑绿的标标是什么武器

评分

参与人数 1技术 +1 收起 理由
ivor + 1 svg 矢量图片,一般github用

查看全部评分

发表于 2019-1-15 12:53:26 | 显示全部楼层
回复 3# yhcfsr
  1. Replace(String, String, Int32, Int32)       
  2. In a specified input substring, replaces a specified maximum number of strings that match a regular expression pattern with a specified replacement string.
复制代码
重载了好几种用法,详情访问地址:https://docs.microsoft.com/en-us ... =netframework-4.7.2
发表于 2019-1-15 12:59:01 | 显示全部楼层
回复  yhcfsr 重载了好几种用法,详情访问地址:
ivor 发表于 2019-1-15 12:53



  非常感谢大佬指点.
发表于 2019-1-15 13:21:42 | 显示全部楼层
回复 3# yhcfsr


    《精通正则表达式》这本书里面有介绍。不同的脚本具体语法略有差别,但大致相似。比如 sed、gawk 等也有类似的用法。
发表于 2019-1-15 14:17:42 | 显示全部楼层
本帖最后由 523066680 于 2019-1-15 14:59 编辑

回复 4# CrLf

    测试(特殊字体转了曲线,30kb)
   

    不转曲就小很多,1.6KB
   

你把签名链接里的 www 换成 bbs 吧,这样我们就不会在点进去后的页面处于非登录状态
发表于 2019-1-15 16:37:32 | 显示全部楼层
ivor 发表于 2019-1-14 22:39



    这两个字符串出现的前后顺序是不一定的,你这样只满足一种条件,考虑全面些好.
  1. [regex]::new('^(?=.*BENDE)(?=.*LASTF).*$\r?\n?',[System.Text.RegularExpressions.RegexOptions]::Multiline).Replace([System.IO.File]::ReadAllText($file,[System.Text.Encoding]::Default),'',1)|Set-Content -LiteralPath $file -Encoding Default
复制代码

评分

参与人数 3技术 +3 收起 理由
yhcfsr + 1 神一般的操作
523066680 + 1 有道理
ivor + 1 有道理

查看全部评分

发表于 2019-1-15 17:28:55 | 显示全部楼层
本帖最后由 523066680 于 2019-1-15 17:44 编辑

楼上说的对,模仿一个:
  1. use File::Slurp;
  2. my $s=read_file("src.txt");
  3. $s=~s/.*((BENDE|LASTF).*){2}\r?\n//;
  4. print $s;
复制代码
(哦这样不严谨,比如重复的 BENDE BENDE,所以还是克隆好了)
  1. use File::Slurp;
  2. my $s=read_file("src.txt");
  3. $s=~s/.*(BENDE.*LASTF|LASTF.*BENDE).*\r?\n//;
  4. print $s;
复制代码
发表于 2019-1-15 20:46:10 | 显示全部楼层
发表于 2019-1-15 21:17:38 | 显示全部楼层
回复 8# 523066680


    巴特主推的是 www 的呀,访问 bathome.net 试试,会重定向到 www.bathome.net

评分

参与人数 1PB +6 收起 理由
523066680 + 6 尴尬了,原来只有我一直在用bbs

查看全部评分

发表于 2019-1-15 21:20:11 | 显示全部楼层
本帖最后由 CrLf 于 2019-1-15 21:26 编辑

发表于 2019-1-15 22:08:01 | 显示全部楼层
本帖最后由 523066680 于 2019-1-16 09:49 编辑

回复 13# CrLf

我有一个蛋疼且不实用的想法:
    用这玩意儿来一段语法高亮的代码。(但肯定不是我实现,我只是消遣区灌水的)

回复  523066680
    这特么加载得多慢
CrLf 发表于 2019-1-15 22:10

这能使加载变慢,想想都exciting
发表于 2019-1-15 22:10:52 | 显示全部楼层
回复 14# 523066680


    这特么加载得多慢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 00:00 , Processed in 0.026084 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表