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

[文本处理] 批处理如何在文本中替换指定行文字?

[复制链接]
发表于 2012-6-16 19:02:36 | 显示全部楼层 |阅读模式
在一个1.txt文件中有一段文字:
...............................
file /sbin/geno initrd\sbin\geno 0750
.........................

我需要把这一行的 0750 替换成 0787

前提:在这个txt 中有很多0750的字段
发表于 2012-6-16 19:24:23 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.    if "%%a"=="/sbin/geno initrd\sbin\geno 0750" (
  4.       echo /sbin/geno initrd\sbin\geno 0787
  5.    ) else echo %%a
  6. )
复制代码
发表于 2012-6-16 21:35:06 | 显示全部楼层
  1. sed -i "\#^file /sbin/geno initrd\\sbin\\geno 0750$#s/0750/0787/" 1.txt
复制代码
发表于 2012-6-18 08:35:21 | 显示全部楼层
回复 3# weichenxiehou
  1. sed -r -i "s#(^file /sbin/geno initrd\\sbin\\geno) 0750$#\1 0787#" a.txt
复制代码
发表于 2012-6-18 09:08:28 | 显示全部楼层

标题

回复 4# forfiles
只是把正则表达式放到s命令的匹配部分而已,我是放在定址部分。而且阁下的代码有语法错误吧?是\( \)而不是( ),不对括号转义会被当成一般字符。
发表于 2012-6-18 10:16:54 | 显示全部楼层
回复 5# weichenxiehou


    阁下不知道-r的作用吧?
发表于 2012-6-18 11:15:08 | 显示全部楼层

标题

回复 6# forfiles
发完帖我就意识到可能是-r的差异了,这个开关确实没用过,还望指教。不知道sed的扩展正则表达式与通常意义上的扩展正则表达式有多大差异,我只知道后者用括号将正则表达式组合,以按单个字符的方式处理,接触的sed正则表达式也确实没介绍。
发表于 2012-6-18 12:45:26 | 显示全部楼层
发表于 2012-6-18 14:03:01 | 显示全部楼层
本帖最后由 weichenxiehou 于 2012-6-18 14:04 编辑

回复 8# forfiles
以前没太关注这个开关的用途,因为没大发现它的作用,今天遇到了就研究了一下,进linux看sed的info page找到了答案:默认是用基本的正则表达式,加-r参数是使能扩展的正则表达式,两者仅在使用4个字符上存在差异(? + () {}),基本正则表达式需要对它们进行转义才能使用它们的特殊含义,而扩展正则表达式默认将它们视为特殊字符,不需要转义。也就是说,使用-r参数唯一的用处就是让代码更易读。
感谢发送链接,用手机登的论坛,公司外网很烂,没来得及看网页,也是偷偷用u盘进的linux。
发表于 2012-6-18 20:01:50 | 显示全部楼层
@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%i in ('findstr "0750" 1.txt') do (
        set a=%%i&set "a=!a:0750=0787!"
        echo !a!
)
发表于 2012-6-18 23:34:07 | 显示全部楼层
回复 10# poter


    楼主说的很明确:在这个txt 中有很多0750的字段,不能乱替换啊
发表于 2012-8-13 17:19:44 | 显示全部楼层
为什么要弄那么复杂,他不过是想替换 0750
  1. sed -i 's/0750/0787/g' 1.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 10:08 , Processed in 0.020786 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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