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

[文本处理] 批处理删除多个txt中的不同数字组合

网上下载了多个页面文章内容,转换成txt后,内容里出现了多组类似 &#12345  、&#98765 的特殊符号与数字的组合(数字组合不同但长度相同),本人试了多次没成功,有时把整行都删除了。
请求删除的方法。先谢了。 (另外不同长度的数字与字母组合怎样删除但不影响行内的其它内容?再谢。)

回复 1# lzyecho

能不能传一部分TXT文档的内容上来看看?
学习中

TOP

回复 2# battab


    请参见附件。

TOP

本帖最后由 apang 于 2014-1-15 20:35 编辑
  1. sed -r "s/&#[0-9]+;//g" a.txt>b.txt
复制代码

TOP

sed好简单啊,纯p的好麻烦.
  1. @echo off&setlocal enabledelayedexpansion
  2. set hh=^
  3. (for /f "delims=" %%a in (a.txt) do (
  4.         set "tmp=%%a"
  5.         for %%b in ("!hh!") do echo,!tmp:^&#=%%~b!
  6.         echo ##
  7. ))>tmp
  8. (for /f "tokens=1* delims=;" %%a in (tmp) do (
  9.     if not "%%a"=="##" (
  10.         if "%%b"=="" (set/p =%%a) else set/p =%%b
  11.     ) else echo,&echo,
  12. ))<nul>b.txt
  13. del tmp
  14. start b.txt
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 lzyecho 于 2014-1-15 23:06 编辑

回复 5# xxpinqz


    感谢apang 和 xxpinqz ,你们太厉害了,高手啊。你们的代码都能很好的达到目的 ,真是感谢!!
apang 用的sed 精练、简短,看来以后还得学习sed了。

xxpinqz 你把批处理玩的精深,。因代码嵌套的多,较多地方看不大懂,希望能逐名解说一下。我还处在学习认识的阶段,继续向大家学习。

TOP

本帖最后由 battab 于 2014-1-16 10:05 编辑

回复 6# lzyecho
  1. @echo off&setlocal enabledelayedexpansion
  2. set hh=^  rem 将转义字符^赋予变量hh
  3. (for /f "delims=" %%a in (a.txt) do (  rem 对a.txt进行文件解析,同时排除空格为分隔符
  4.         set "tmp=%%a"   rem 将a.txt中每行的内容赋予临时变量tmp
  5.         for %%b in ("!hh!") do echo,!tmp:^&#=%%~b!  rem将a.txt中每行的&#替代为^
  6.         echo ##    rem 在a.txt中的每一行下面加##
  7. ))>tmp  rem 将上面处理好的结果输出到临时文件TMP中
  8. (for /f "tokens=1* delims=;" %%a in (tmp) do (  rem 对临时文件TMP进行文件解析,以;为分隔符,提取第一节及第二节后面的所有内容
  9.     if not "%%a"=="##" (  rem 排除含有##的行不处理
  10.         if "%%b"=="" (set/p =%%a) else set/p =%%b  rem 判断第二节后面的内容是否为空,为空则输出第一节内容,否则输出第一节及第二节后面的所有内容
  11.     ) else echo,&echo,  rem 输出两回车
  12. ))<nul>b.txt  rem 将处理好的文件输出到b.txt。 这里的<nul的作用可能是同行输出内容吧,不太清楚?同求解!
  13. del tmp  rem 删除临时文件
  14. start b.txt rem 打开处理好的文档
复制代码
初学者试解读,有不对的地方还请各位前辈指教。
学习中

TOP

纠正这里
rem 将转义字符^赋予变量hh
这里hh值应该是回车

TOP

回复 8# terse


    感谢battab的详尽解说,有多些地方茅塞顿开了。
<nul>b.txt   的含义是将结果以一行的形式输出,即“回车不换行”。
terse 说的代码 set hh=^  rem 将转义字符^赋予“回车hh”,不太明白它的意义??

echo,!tmp:^&#=%%~b! 替换代码中的%%~b的意思是?? 再请说明 ,谢啦。

TOP

回复 9# lzyecho
这里 %%~b 是回车 换行

TOP

另 楼主如有安装POWERSHELL (win7自带)也简单的
  1. Get-Content $pwd\a.txt | % {$_ -Replace '&#\d+',''} | out-file b.txt
复制代码

TOP

回复 8# terse


    你是说^在这里做回车符只用吗?
这样上面代码确实可以解释了,但是输出的  tmp文本  是这个样的
高中学习阶段,12345;你一定在班集体里度过了美好的时光,收获了深厚的情谊65489;,同窗共读,互相帮助,彼此激励,即便是一次不愉快的争执,都给你留下难忘的记忆,伴你走向成熟。
##
某机构就45812;“同学关系”问题在几所学校作了一次调查。362514;结果显示,60%的人表示满意,36%的人认为一般,4%的人觉得不满意。
##

怎么解释?

TOP

回复 12# BHsolve
这里有个确实是替换了 只是你看不到
你可以在CMD里 TYPE 就看到结果 或者 FOR 遍历都可显示
这里\R\N 和 \N 是有区别的
其实这时的TMP文本替换进来的只有回车(0A)没有换行 (0D)
1

评分人数

    • BHsolve: 只有回车(0A)没有换行 (0D)技术 + 1

TOP

回复 13# terse


    原来如此,学习了,学习了。

TOP

回复 7# battab


    xxpinqz ,你好,在你解释的代码中还是不明白:
1.上面代码的第2、3、4行的意思是把^(下面还有两个空行或两个回车)定义给变量hh,为什么要是2个回车?

2. 为什么要 echo ##,起什么作用?而下面的if not "%%a"=="##" 又是不处理这些含##的行??
3.切分行的第二内容为“空”( if "%%b"==""  )意思?不为“空”时又是什么意思?

也就说作者的设计编程思路不明白。
烦请你结合上面附件的a.txt说明一下,谢。

TOP

返回列表