Board logo

标题: [文本处理] 【已解决】求批处理:在A文本中直接删除不含@的行 [打印本页]

作者: gu3669    时间: 2019-8-27 19:40     标题: 【已解决】求批处理:在A文本中直接删除不含@的行

本帖最后由 gu3669 于 2019-8-27 21:16 编辑

求批处理:在A文本中直接删除不含@的行,然后把所有空行也删除
A文本:
荆州日报 jzdaily@jz.hb.cninfo.net
荆州晚报 jzdaily@jz.hb.cninfo.net

农村新报 hbnmbbjb@hbdaily.com.cn
家庭文摘报
湖北日报 qzgzb@hbdaily.com.cn
市场指南报 scznbbjb@hbdaily.com.cn

运行批处理后应该是这样的:

荆州日报 jzdaily@jz.hb.cninfo.net
荆州晚报 jzdaily@jz.hb.cninfo.net
农村新报 hbnmbbjb@hbdaily.com.cn
湖北日报 qzgzb@hbdaily.com.cn
市场指南报 scznbbjb@hbdaily.com.cn

求高手帮忙,衷心感谢!
作者: Batcher    时间: 2019-8-27 20:01

  1. @echo off
  2. findstr "@" "A.txt" > "A.txt.tmp"
  3. move /y "A.txt.tmp" "A.txt"
复制代码

作者: gu3669    时间: 2019-8-27 20:33

非常感谢2楼的帮助。我想顺便问一下,在word里怎么解决这个问题,比如用查找替换,输入什么代码能删除不含@的行?再次感谢你!
作者: qixiaobin0715    时间: 2019-8-27 22:23

本帖最后由 qixiaobin0715 于 2019-8-27 22:32 编辑

回复 3# gu3669
Word文档高级查找和替换通配符表示法比较变态,像这样整行替换尽量少用,不小心就会落入陷阱,好多通配符表达意义模糊不明确。不好用不好用。
点击替换——更多——勾选使用通配符
查找内容填入:^13[!\@^13]{1,}^13
替换为:^13
点击全部替换
如果不含@的行存在连续多个行,需多次点击全部替换。直至0次替换为止。
替换前备份文件,以免出现意外。
首行不含@,请手工删除。
作者: Batcher    时间: 2019-8-28 08:05

回复 4# qixiaobin0715


    哪个通配符表达意义模糊不明确?
作者: qixiaobin0715    时间: 2019-8-28 09:21

回复 5# Batcher
比如通配符“@”和“*”就很难搞定。
按照Word文档中查找中的特殊格式解释为:
@——前一个或多个。我的理解是前面的字符一个或多个,相当于正则表达式中的量词“+”。
*——零个或多个字符。我的理解是相当于正则表达式中的“.*”组合。
我们将下面一段示范文本复制到Word文档中,进行高级查找
  1. 我们有三月、六月、或者一年的储期,更不用说还有三年、五年和十年的储期了。
  2. We offer a choice of three, six or #####twelve month maturities, let alone three, five or ten year plans.
  3. 英语中表达递进关系时,最常用的有“let alone”“still less”“much less”等,例如:
  4. I cannot afford to rent [rent] a house, let alone buy it.(我连房租都付不起,更谈不上买房了。)
  5. This firm can hardly pay##### for the salary still less for their development. (这间公司连发工资都成问题,
  6. 更谈不上发展了。)
  7. This firm has never built a common highway, much less an expressway (这家公司连普通公路都
  8. 未建造过,就更谈不上建高速公路了。)
复制代码
1.我想查找相连的字符#。
勾选使用通配符
查找内容:#@
实际上匹配的是单个的#
2.查找数目相连的不定的#,后面是单词“twelve”
勾选使用通配符
查找内容:#@twelve
这一回查找结果是我所期望的
3.查找“pay”+“若干#”的组合
勾选使用通配符
查找内容:pay#@
结果只匹配pay#,后面的#就忽略了。
4.有一回我想匹配以t开头e结尾的单词,这么写的表达式t*e,结果很无奈,不过这次是自己该打,太想当然了,实际应当在表达式两边加上单词边界。这里主要是为了说“*”可以匹配换行符的,考虑不周有可能匹配几行、几十行、甚至上百行。也可以用t*e匹配上面文本,看一看会得到什么结果。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2