查找并替换大量文本,但只有特定部分

时间:2013-08-03 00:06:48

标签: batch-file replace find dos

我会尝试解释一下我想要完成的事情,但最好通过一个例子来解释。

我正在尝试改变这样的事情:

Example Line 1
-Sub line X
-Sub line Y
-Sub line Z
Example Line 2
-Sub line X
-Sub line Y
-Sub line Z
Example Line 3
-Sub line X
-Sub line Y
-Sub line Z

并插入如下行:

Example Line 1
-Sub line X
-Sub line Y
-Sub line Z
Example Line 2
-Sub line X
-Sub line Y
-Inserted line 1
-Inserted line 2
-Inserted line 3
-Sub line Z
Example Line 3
-Sub line X
-Sub line Y
-Sub line Z

因此,虽然子线可能与其他示例线相同,但示例线始终不同。 我想知道是否有办法找到特定的示例行(在本例中为Example Line 2),然后在其中找到Sub line Y,然后然后插入代码(或前)?

或者是否存在一个我完全不同的逻辑

仅供参考 - 使用本机MS-DOS创建此批处理脚本。 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

我假设文本在文件中。

如果要在命令中拼写插入的行:

sed '/Example Line 2/,/Example Line 3/{/-Sub line Z/i\
-Inserted line 1\
-Inserted line 2\
-Inserted line 3
;}' filename

如果要从文件中读取插入的行(例如“newfile”):

sed '/Example Line 2/,/Example Line 3/{/-Sub line Y/ r newfile
}' filename

答案 1 :(得分:0)

@echo off
setlocal EnableDelayedExpansion
set section=Example line 2
set line=-Sub line Y

rem Search for "line" line *after* "section" line
for /F "tokens=1* delims=:" %%a in ('findstr /N /C:"%section%" /C:"%line%" theFile.txt') do (
   if not defined StartSection (
      if "%%b" equ "%section%" set StartSection=%%a
   ) else (
      if not defined TargetLine (
         if "%%b" equ "%line%" set TargetLine=%%a& goto continue
      )
   )
)
echo Target line "%line%" into section "%section%" not found
goto :EOF

:continue

for /F "tokens=1* delims=:" %%a in ('findstr /N "^" theFile.txt') do (
   echo(%%b
   if %%a equ %TargetLine% (
      echo -Inserted line 1
      echo -Inserted line 2
      echo -Inserted line 3
   )
)