标题: [文本处理] [已解决]批处理如何删除多个文本中的以指定字符串开头的行? [打印本页]
作者: CZT 时间: 2009-6-26 21:19 标题: [已解决]批处理如何删除多个文本中的以指定字符串开头的行?
本帖最后由 pcl_test 于 2016-10-9 21:34 编辑
我这里有一批文件需要用批处理删除文本文件中指定的内容,请论坛里的前辈帮忙看看好吗?
有如下文件很多
E10锣顶2MM开粗.mac
E10外形开粗(挖槽).mac
R3光顶(曲面).mac-
- IMPORT TEMPLATE PROJECT FILEOPEN "D:\dcam\AUTOPMILL6.0\TOOL.ptf"
- ACTIVATE TOOL "E10(开粗)"
- FORM BLOCK
- EDIT BLOCKTYPE LIMITS
- EDIT BLOCK ALL UNLOCK
- EDIT BLOCK RESETLIMIT 1
- EDIT BLOCK RESET
- EDIT BLOCK ZMAX @{ZMAX}+0.5@
- EDIT BLOCK ZMIN @{ZMAX}+0.12@
- EDIT BLOCK ALL UNLOCK
- BLOCK ACCEPT
- FORM FEEDRATE
- EDIT RSPEED 30000
- EDIT PRATE 1000
- EDIT FRATE 2000
- EDIT RPM 2000
- FEEDRATE ACCEPT
- FORM TOOLAXIS
- EDIT TOOLAXIS TYPE VERTICAL
- TOOLAXIS ACCEPT
- IMPORT TEMPLATE ENTITY TOOLPATH "Favourites\Offset-AreaClear-Model.ptf" FORM TOOLPATH
- EDIT RTOLERANCE 0.05
- FORM THICKNESS ROUGHING
- EDIT RTHICKNESS AXIAL_RADIAL ON
- EDIT RTHICKNESS @{THK}+0.45@
- EDIT RTHICKNESS AXIAL 0.07
- THICKNESS ACCEPT
- EDIT OVER 6.5
- EDIT ZHEIGHTS AUTOMATIC ON
- EDIT ZHEIGHTS AUTOMATIC STEPDOWN 0.8
- EDIT ACUTDIR ANY
- ACTIVATE BOUNDARY " "
- EDIT FINALPROFILEPASS OFF
- EDIT AREAFILTER ON
- EDIT AREAFILTERVALUE 0.5
- EDIT LMOVES RAMP
- SET OUTSIDE
- EDIT SLICEARCFIT ON
- EDIT SMOOTHLINKS OFF
- EDIT AREACLEAROFFSET SMOOTHING ON
- EDIT AREACLEAROFFSET SMOOTHINGALLOWANCE 13
- EDIT AREACLEAR REFERENCE ENABLED OFF
- EDIT OFFSETDIRECTION OUTSIDEIN
- SET AREACLEAREXPERT
- EDIT ALLOWTOOLOUTSIDEBLOCK OFF
- UNSET AREACLEAREXPERT
- EDIT TOOLPATH ; CALCULATE
- AREACLEAR CANCEL
- FORM LEADLINK
- EDIT TOOLPATH LEADS PAGE ZHEIGHTS
- EDIT TOOLPATH LEADS SKIMDIST 4
- EDIT TOOLPATH LEADS PLUNGEDIST 2
- EDIT TOOLPATH LEADS INCREMENT_FROM_STOCK Y
- EDIT TOOLPATH LEADS GOUGECHECK Y
- EDIT TOOLPATH LEADS PAGE LEADIN
- EDIT TOOLPATH LEADS LEADIN RAMP
- FORM PMLLEADINRAMP
- EDIT TOOLPATH LEADS LEADIN RAMPOPT HEIGHT_INCREMENT 0.6
- EDIT TOOLPATH LEADS LEADIN RAMPOPT ZIGANGLE 2
- EDIT TOOLPATH LEADS LEADIN RAMPOPT FINITELENGTH N
- LEADINRAMP ACCEPT
- EDIT TOOLPATH LEADS MOVESTARTPOINTS Y
- EDIT TOOLPATH LEADS LEADSONSHORTLINKS Y
- EDIT TOOLPATH LEADS LEADIN2 NONE
- EDIT TOOLPATH LEADS PAGE LEADSOUT
- EDIT TOOLPATH LEADS LEADOUT NONE
- EDIT TOOLPATH LEADS LEADOUT2 NONE
- EDIT TOOLPATH LEADS PAGE LEADIN
- EDIT TOOLPATH LEADS PAGE LEADEXTENSIONS
- EDIT TOOLPATH LEADS EXTIN NONE
- EDIT TOOLPATH LEADS EXTOUT NONE
- EDIT TOOLPATH LEADS PAGE LINK
- EDIT TOOLPATH LEADS LINK SKIM
- EDIT TOOLPATH LEADS LONGLINK SKIM
- EDIT TOOLPATH LEADS SAFELINK SAFEZ
- EDIT TOOLPATH LEADS LINK THRESHOLD 20
- PROCESS TPLEADS
- LEADS ACCEPT
- FORM TOOLZHEIGHTS
- EDIT SAFZ RESET EDIT STAZ RESET
- EDIT SAFZ @{ZMAX}+10@
- EDIT STAZ @{ZMAX}+2@
- EDIT RMOVES SKIM
- EDIT ISAFZ 3
- EDIT ISTAZ 1
- RESET TOOLPATH RAPID
- TOOLZHEIGHTS ACCEPT
- FORM DATUM
- EDIT DATUM AUTOMATIC
- EDIT DATUM FIRST_SAFZ
- EDIT DATUM DISTANCE @{ZMAX}+10@
- DATUM ACCEPT
- DELETE LEVEL ALL
复制代码
如上,现要把文件中所有以“FORM 开头到行尾的部分删除” 如果 “FORM”前有内容则前面的内容不能删除。
上面的代码红色部分。但其它部分和原格式保持不变
请教各位大哥大姐想想办法。
我本来用到第三方命令行工具用下面的代码,但他把FORM以前的内容也删除了
sed "/FORM/d" 1.mac>a.mac
[ 本帖最后由 CZT 于 2009-7-10 21:25 编辑 ]
作者: CZT 时间: 2009-6-26 21:24
代码不能涂颜色啊
不好意思
就是上面的
FORM BLOCK
FORM FEEDRATE
FORM TOOLAXIS
FORM THICKNESS ROUGHING
FORM LEADLINK
FORM PMLLEADINRAMP
FORM TOOLZHEIGHTS
FORM DATUM
这些内容
下面这句删除FORM后面的内容
IMPORT TEMPLATE ENTITY TOOLPATH "Favourites\Offset-AreaClear-Model.ptf" FORM TOOLPATH
删除后为
IMPORT TEMPLATE ENTITY TOOLPATH "Favourites\Offset-AreaClear-Model.ptf"
作者: Batcher 时间: 2009-6-27 01:05
- sed -i -e "/^FORM/d" -e "s/FORM.*//g" a.txt
复制代码
第三方命令行工具 sed.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: CZT 时间: 2009-6-27 19:48
首先多谢Batcher 兄上面的代码
它已经完美的处理好单个的我需要修改的文件,
但现在的问题是我现有很多个这样的文件需要做
这样的更改,想再请教一下怎样才能让批处理处理
一个文件夹内的所有这样的.MAC文件而又保持原来的
文件名呢?
下面的是我自己写的代码- setlocal enabledelayedexpansion
- for %%m in (*.mac) do (
- for %%i in (%%m) do set "%%i=%~nx%%a"
- for %%a in (%%m) do (
- sed -i -e "/^FORM/d" -e "s/FORM.*//g" & ren sedDOSSUX !%~nx%%a!
- )
- )
- pause
复制代码
我知道还有很多方面的语法错误,但我已经尽了最大的努力却只能做成这个样子了,还要请论坛里的兄弟门帮忙写一段这样的代码好吗?
代码功能:删除同文件夹内所有以.mac为扩展名的文本文件中的以“FORM”开头的行 如:
FORM THICKNESS ROUGHING
FORM FEEDRATE
及不是以“FORM”开头但这一行中有“FORM”字符的需要删除这一行的“FORM ”字符以及跟在此字符后的所有字符 如
IMPORT TEMPLATE ENTITY TOOLPATH "Favourites\Offset-AreaClear-Model.ptf" FORM TOOLPATH
需要删除此行中的 FORM TOOLPATH
楼上Batcher兄的代码 sed -i -e "/^FORM/d" -e "s/FORM.*//g" 已经能完美的解决此问题
再次感谢Batcher兄
这一句可以成功更改所有文件,但不知道怎么把文件名改回来
for %%m in (*.mac) do (
sed -i -e "/^FORM/d" -e "s/FORM.*//g" %%m & ren sedDOSSUX new_%%m
)
[ 本帖最后由 CZT 于 2009-6-27 20:04 编辑 ]
作者: Batcher 时间: 2009-6-27 20:15 标题: 回复 4楼 的帖子
- @echo off
- for %%a in (*.mac) do (
- sed -i -e "/^FORM/d" -e "s/FORM.*//g" "%%a"
- )
复制代码
作者: CZT 时间: 2009-6-27 20:31
原帖由 Batcher 于 2009-6-27 20:15 发表
@echo off
for %%a in (*.mac) do (
sed -i -e "/^FORM/d" -e "s/FORM.*//g" "%%a"
)
就这么简单啊!
多谢
但上面的代码行不通啊!
它产生了很多这样名字的文件
sedDOSSUG
sedDOSSUH
sedDOSSUO
sedDOSSUP
sedDOSSUQ
sedDOSSUS
下面这个是我刚才想出来的- @echo off
- for %%m in (*.mac) do (
- @sed -i -e "/^FORM/d" -e "s/FORM.*//g" %%m & ren sedDOSSUX xin%%m
- )
- md 更改后文件
- move xin*.mac 更改后文件>nul
- cd 更改后文件
- SetLocal ENABLEDELAYEDEXPANSION
- FOR /F "delims=" %%a in ('dir /b/a-d *.mac') do (
- set var=%%a
- set str=!var:xin=!
- ren "!var!" "!str!"
- )
复制代码
但是这样的代码为什么会多出一个文件来呢
[ 本帖最后由 CZT 于 2009-6-27 20:40 编辑 ]
作者: Batcher 时间: 2009-6-27 22:40 标题: 回复 6楼 的帖子
你用的哪个版本的sed呢?是3楼提供的那个么?
作者: CZT 时间: 2009-7-10 21:27
原帖由 Batcher 于 2009-6-27 22:40 发表
你用的哪个版本的sed呢?是3楼提供的那个么?
多谢Batcher前辈
我以前用的确实不是三楼提供的那个
重新下载三楼的工具后
问题已成功解决
作者: jackerloo2009 时间: 2009-7-10 22:55
findstr /v /x /i /b "form.*" 1.txt
哎!没看下面那个,行后有的要去掉就有些麻烦了
[ 本帖最后由 jackerloo2009 于 2009-7-10 23:04 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |