[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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%
复制代码

本帖最后由 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

评分人数

TOP

本帖最后由 yhcfsr 于 2019-1-15 12:47 编辑

回复 2# ivor

想不到正则表达式也能调用replace方法.
还有许多函数不知道用法,不知道是不是姿势不对,帮助文档没给我多少帮助.
求大佬指点学习方法.
QQ 33892006

TOP

回复 2# ivor


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

评分人数

    • ivor: svg 矢量图片,一般github用技术 + 1

TOP

回复 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
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复  yhcfsr 重载了好几种用法,详情访问地址:
ivor 发表于 2019-1-15 12:53



  非常感谢大佬指点.
QQ 33892006

TOP

回复 3# yhcfsr


    《精通正则表达式》这本书里面有介绍。不同的脚本具体语法略有差别,但大致相似。比如 sed、gawk 等也有类似的用法。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 523066680 于 2019-1-15 14:59 编辑

回复 4# CrLf

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

    不转曲就小很多,1.6KB
   

你把签名链接里的 www 换成 bbs 吧,这样我们就不会在点进去后的页面处于非登录状态

TOP

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

评分人数

TOP

本帖最后由 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;
复制代码

TOP

TOP

回复 8# 523066680


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

评分人数

    • 523066680: 尴尬了,原来只有我一直在用bbsPB + 6

TOP

本帖最后由 CrLf 于 2019-1-15 21:26 编辑

TOP

本帖最后由 523066680 于 2019-1-16 09:49 编辑

回复 13# CrLf

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

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

这能使加载变慢,想想都exciting

TOP

回复 14# 523066680


    这特么加载得多慢

TOP

返回列表