Board logo

标题: [文本处理] 批处理如何实现从文本指定位置到文本指定位置的替换? [打印本页]

作者: 116247215    时间: 2014-6-5 15:01     标题: 批处理如何实现从文本指定位置到文本指定位置的替换?

如何实现把同目录下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里的路径换下,谢谢。
作者: 116247215    时间: 2014-6-5 16:10

有人教教吗?
作者: 116247215    时间: 2014-6-5 16:37

教教吧,工作急用
作者: PowerShell    时间: 2014-6-5 18:00

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 $目标文件
复制代码

作者: Batcher    时间: 2014-6-5 21:33

  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
复制代码

作者: 116247215    时间: 2014-6-6 09:52

Batcher ,您写的这个为什么没有用啊,a_new.txt没有东西
作者: 116247215    时间: 2014-6-6 09:58

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
作者: 116247215    时间: 2014-6-6 10:06

想要实现的是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)
复制代码

作者: Batcher    时间: 2014-6-6 10:10

回复 7# 116247215


可能是你的sed版本问题,试试这个:
http://pan.baidu.com/share/link?shareid=452449&uk=1124163200
作者: 116247215    时间: 2014-6-6 10:23

回复 9# Batcher


    您看下8楼,您写的这个不是这么实现的吧
作者: Batcher    时间: 2014-6-6 11:23

回复 10# 116247215


    看过了。你现在执行5楼的代码,报错信息是什么?
作者: 116247215    时间: 2014-6-9 10:03

回复 11# Batcher


    谢谢您,问题解决了




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