Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 查找并替换大量文本,但仅限于特定部分_Batch File_Replace_Find_Dos - Fatal编程技术网

Batch file 查找并替换大量文本,但仅限于特定部分

Batch file 查找并替换大量文本,但仅限于特定部分,batch-file,replace,find,dos,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 l

我会试着解释一下我想要完成什么,但最好用一个例子来解释

我试图改变这样的情况:

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
因此,虽然子行可能与其他示例行相同,但示例行总是不同的。 我想知道是否有一种方法可以在示例行2中找到特定的示例行,然后在其中找到子行Y,然后在后面或之前插入代码

还是我缺少了一个完全不同的逻辑

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

我假设文本在一个文件中

如果要在命令中拼写插入的行,请执行以下操作:

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

我正在使用本机Windows批处理-因此没有sedGeeze,当我看到它在我面前时,这很有意义lol。我有一个查找和替换问题。如果你能喝一杯,我将不胜感激@TurdPile:看到我对这个问题的回答了吗
@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
   )
)