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

[文本处理] 批处理如何实现从文本指定位置到文本指定位置的替换?

[复制链接]
发表于 2014-6-5 15:01:44 | 显示全部楼层 |阅读模式
如何实现把同目录下a.txt的第3行的第1到8个字符替换掉b.txt的第2行第34到第41个字符,谢谢!
a.txt:
  1. REPLACE(ARGVALUE,'-','')                                                        
  2. --------------------------------------------------------------------------------
  3. 20140530
复制代码
b.txt:
  1. load data
  2. infile "E:\XINHANETL\source\8033_20140529_CUSTOMER.txt"
  3. truncate
  4. into table etl.mid_customer
  5. fields terminated by ","optionally enclosed by '"'
  6. (BRANCH_ID,
  7.   BASE_DATE,
  8.   FULL_NAME,
  9.   ID_TYPE,
  10.   ID_NO,
  11.   CIF_NO,
  12.   NATIONALITY,
  13.   CIF_TYPE,
  14.   TEL_NO,
  15.   ADDRESS,
  16.   CONTACT_METHOD,
  17.   CIF_CLASSIFIED,
  18.   CAPITAL_AMT,
  19.   CEO_NAME,
  20.   CEO_ID_TYPE,
  21.   CEO_ID_NO,
  22.   OPEN_ORGAN,
  23.   OPEN_DATE,
  24.   CLOSE_DATE,
  25.   CUST_TYPE,
  26.   CO_TEL_NO,
  27.   CO_FAX_NO,
  28.   CO_RESIDENT_CODE,
  29.   CO_INDUSTRY_CODE,
  30.   COMPANY_SIZE,
  31.   CO_SP_ZONE_YN,
  32.   TAX_CODE,
  33.   INVEST_NATION_ID,
  34.   CO_EMAIL_ADDRESS,
  35.   CO_DECLARATION,
  36.   RE_EMAIL_ADDRESS,
  37.   INF_LAST_CORC_BUSS_DT)
复制代码
就是想把b.txt里的路径换下,谢谢。
 楼主| 发表于 2014-6-5 16:10:53 | 显示全部楼层
有人教教吗?
 楼主| 发表于 2014-6-5 16:37:44 | 显示全部楼层
教教吧,工作急用
发表于 2014-6-5 18:00:49 | 显示全部楼层
powershell 代码
  1. cd   a:\pscode\116247215    # 这里改成进入目标目录

  2. $源字符数组 = $(Get-Content  .\a.txt)[2].tochararray()
  3. $目标文件 = Get-Content  .\b.txt   -ReadCount  0
  4. $目标第二行数组 = $目标文件[1].tochararray()
  5. $新目标第二行 = "" + $目标第二行数组[0..32] + $源字符数组[0..7] + $目标第二行数组[41..$目标第二行数组.length]
  6. echo $新目标第二行
  7. $目标文件[1] = $新目标第二行
  8. $输出文件名 = '.\b.txt' + '.txt'
  9. Out-File  -LiteralPath $输出文件名  -Encoding unicode  -InputObject $目标文件
复制代码
发表于 2014-6-5 21:33:24 | 显示全部楼层
  1. @echo off
  2. for /f %%i in ('sed -r "2!d; s/.{33}(.{8}).*/\1/" b.txt') do set n=%%i
  3. sed -r "3s/.{8}/%n%/" a.txt > a_new.txt
复制代码
 楼主| 发表于 2014-6-6 09:52:18 | 显示全部楼层
Batcher ,您写的这个为什么没有用啊,a_new.txt没有东西
 楼主| 发表于 2014-6-6 09:58:30 | 显示全部楼层
sed: Unknown option -r
Usage: sed [-n] script [file...]
       sed [-nE] [-e script] [-f scriptfile] [file...]
sed: Unknown option -r
Usage: sed [-n] script [file...]
       sed [-nE] [-e script] [-f scriptfile] [file...]
Batcher ,能再帮我看看吗?PowerShell ,也谢谢您,只是我不会用那个,只想用bat
 楼主| 发表于 2014-6-6 10:06:16 | 显示全部楼层
想要实现的是b.txt变为
  1. load data
  2. infile "E:\XINHANETL\source\8033_20140530_CUSTOMER.txt"
  3. truncate
  4. into table etl.mid_customer
  5. fields terminated by ","optionally enclosed by '"'
  6. (BRANCH_ID,
  7.   BASE_DATE,
  8.   FULL_NAME,
  9.   ID_TYPE,
  10.   ID_NO,
  11.   CIF_NO,
  12.   NATIONALITY,
  13.   CIF_TYPE,
  14.   TEL_NO,
  15.   ADDRESS,
  16.   CONTACT_METHOD,
  17.   CIF_CLASSIFIED,
  18.   CAPITAL_AMT,
  19.   CEO_NAME,
  20.   CEO_ID_TYPE,
  21.   CEO_ID_NO,
  22.   OPEN_ORGAN,
  23.   OPEN_DATE,
  24.   CLOSE_DATE,
  25.   CUST_TYPE,
  26.   CO_TEL_NO,
  27.   CO_FAX_NO,
  28.   CO_RESIDENT_CODE,
  29.   CO_INDUSTRY_CODE,
  30.   COMPANY_SIZE,
  31.   CO_SP_ZONE_YN,
  32.   TAX_CODE,
  33.   INVEST_NATION_ID,
  34.   CO_EMAIL_ADDRESS,
  35.   CO_DECLARATION,
  36.   RE_EMAIL_ADDRESS,
  37.   INF_LAST_CORC_BUSS_DT)
复制代码
发表于 2014-6-6 10:10:19 | 显示全部楼层
回复 7# 116247215


可能是你的sed版本问题,试试这个:
http://pan.baidu.com/share/link?shareid=452449&uk=1124163200
 楼主| 发表于 2014-6-6 10:23:20 | 显示全部楼层
回复 9# Batcher


    您看下8楼,您写的这个不是这么实现的吧
发表于 2014-6-6 11:23:52 | 显示全部楼层
回复 10# 116247215


    看过了。你现在执行5楼的代码,报错信息是什么?
 楼主| 发表于 2014-6-9 10:03:46 | 显示全部楼层
回复 11# Batcher


    谢谢您,问题解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 06:32 , Processed in 0.030609 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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