Board logo

标题: [文本处理] [已解决]批处理怎样在文本的某字符前或后面隔行,插入行? [打印本页]

作者: qlewa    时间: 2013-2-7 16:56     标题: [已解决]批处理怎样在文本的某字符前或后面隔行,插入行?

本帖最后由 qlewa 于 2013-2-8 15:19 编辑

我还是记录全点,
如记事本  date.txt 中
  1. {"i":"20130208-3:12"}];var iIssueCount=101235, aryIssue=[20130207-3.21: line 23,12
  2. 20130207-32.2: line 23,22
  3. 20130207-32.3: line 22,12
  4. 20130207-32.4: line 23,32
  5. 20130207-32.5: line 26,72
  6. 20130207-32.6: line 29,13
  7.      .
  8.      .
  9.      .
  10.      .
复制代码
要在  “aryIssue=[ ”后面截断成下一行!  结果要如下:
  1. {"i":"20130208-3:12"}];var iIssueCount=101235, aryIssue=[
  2. 20130207-3.21: line 23,12
  3. 20130207-32.2: line 23,22
  4. 20130207-32.3: line 22,12
  5. 20130207-32.4: line 23,32
  6. 20130207-32.5: line 26,72
  7. 20130207-32.6: line 29,13
  8.      .
  9.      .
  10.      .
  11.      .
复制代码
请帮助下!

简单的话,调用第三方也可以!

SED等
作者: apang    时间: 2013-2-7 18:53

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Text = fso.OpenTextFile("date.txt").ReadAll
  3. Set Re = New RegExp
  4. Re.Pattern = "(.*?\[)"
  5. Re.Global = True
  6. Text = Re.Replace(Text,"$1" & vbCrLf)
  7. fso.OpenTextfile("a.txt",2,True).Write Text
复制代码

作者: CrLf    时间: 2013-2-7 19:07

  1. sed -i "s/.*=[/&\n/g" date.txt
复制代码

作者: 悬崖之树    时间: 2013-2-7 22:38

@echo off&setlocal enabledelayedexpansion
set "str=var iIssueCount=101235, aryIssue=[20130207-3.22"
:loop
if "!str:~%n%,1!" neq "[" (
set /a n-=1&goto loop
)
echo !str:~,%n%!
echo !str:~%n%!
pause
作者: qlewa    时间: 2013-2-8 00:15

回复 3# CrLf

不行啊 ,不知道为什么?

sed: -e expression #1, char 12: unterminated `s' command
作者: qlewa    时间: 2013-2-8 00:16

回复 2# apang


也不行啊,一串找不到命令之类!
作者: qlewa    时间: 2013-2-8 00:17

回复 4# 悬崖之树



但是这个文件不是单排的,是很多行的,怎么处理啊!
作者: CrLf    时间: 2013-2-8 02:34

  1. @echo off
  2. (for /f "delims="eol^= %%a in (date.txt) do (
  3.    set "str=%%a"
  4.    setlocal enabledelayedexpansion
  5.    echo;!str:[=[^
  6. !
  7.    endlocal
  8. ))>date2.txt
  9. pause
复制代码

作者: terse    时间: 2013-2-8 09:31

回复  CrLf

不行啊 ,不知道为什么?

sed: -e expression #1, char 12: unterminated `s' command
qlewa 发表于 2013-2-8 00:15
  1. sed  "s/ aryIssue=\[/&\n/g" date.txt|more >date2.txt
复制代码

作者: qlewa    时间: 2013-2-8 15:10

回复 8# CrLf


你好,她只在“ [ ”    后面生成了,小黑方块!  不知道为什么,可能是编码引起的吧!
作者: qlewa    时间: 2013-2-8 15:11

回复 9# terse




感谢,,,成功了!!!!!!谢谢帮主啊!
作者: 悬崖之树    时间: 2013-2-8 15:53

下面代码是改进后的:
  1. @echo off&setlocal enabledelayedexpansion
  2. ::本程序演示将待处理字符串在倒数第3次出现“[”时换行
  3. set "str=var [iIssueCount=[101235, aryIssue=[20130207-3.22"
  4. for /l %%i in (1 1 3) do (
  5.    call :loop
  6. )
  7. set /a n+=1
  8. echo !str:~,%n%!
  9. echo !str:~%n%!
  10. pause
  11. :loop
  12. if "!str:~%n%,1!" neq "[" (
  13. set /a n-=1&goto loop
  14. )
  15. set /a n-=1
  16. goto :eof
复制代码

作者: qlewa    时间: 2013-2-10 02:03

回复 12# 悬崖之树


还是谢谢你,但是还是不行,可能你没有理解我要的结果吧!




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