我会尝试解释一下我想要完成的事情,但最好通过一个例子来解释。
我正在尝试改变这样的事情:
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创建此批处理脚本。 谢谢你的帮助
答案 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
)
)