Batch file 如何将命令输出用作命令中的输入字符串;sed-i';10istring';a、 txt";
我有两个文件 a、 文本 嗨 你好 再见 b、 文本 苹果 香蕉 葡萄 每天我都要将a.txt的第2行替换为b.txt的第3行 所以结果应该是 a、 文本 嗨 葡萄 再见 这两个文件的内容每天都会被其他逻辑更改 所以我不能简单地搜索模式, 但我应该取代的那一行永远不会改变 到目前为止,我已经得到了一些“sed”命令,如下所示Batch file 如何将命令输出用作命令中的输入字符串;sed-i';10istring';a、 txt";,batch-file,sed,replace,Batch File,Sed,Replace,我有两个文件 a、 文本 嗨 你好 再见 b、 文本 苹果 香蕉 葡萄 每天我都要将a.txt的第2行替换为b.txt的第3行 所以结果应该是 a、 文本 嗨 葡萄 再见 这两个文件的内容每天都会被其他逻辑更改 所以我不能简单地搜索模式, 但我应该取代的那一行永远不会改变 到目前为止,我已经得到了一些“sed”命令,如下所示 $> sed -i '2d' a.txt $> sed -i '2i**grape**' a.txt 此命令将为我提供所需的结果,但在“grape”部分,
$> sed -i '2d' a.txt
$> sed -i '2i**grape**' a.txt
此命令将为我提供所需的结果,但在“grape”部分,
我想像这样使用命令输出
$> sed -n 3p b.txt
因此,伪命令应该是
$> sed -i '2i**sed -n 3p b.txt**' a.txt
我认为的方法是可能的?还是我有一个错误的方法?
有什么解决方案吗?在PowerShell中,您可以执行以下操作:
$a = Get-Content a.txt
$b = Get-Content b.txt
$a[1] = $b[2]
$a | Set-Content a.txt
sed -i "2c $(sed -n 3p b.txt)" a.txt
可读性较差的单行程序可能类似于
$a = gc a.txt; $a[0],(gc b.txt)[2],($a | select -skip 2) | sc a.txt
也可以在批处理文件中调用PowerShell命令。按如下所示设置批处理文件内容,然后在cmd中运行批处理文件:
PowerShell.exe -Command "$a = Get-Content a.txt;$b = Get-Content b.txt;$a[1] = $b[2];$a | Set-Content a.txt"
课堂作业?如果是的话。。。确保你完全理解! 这将满足您在纯bat中的要求。除空行外,所有其他行也将被复制。 如果有,这就行不通了!或文件a和b中的其他特殊字符
@echo off
if exist Newb.txt del Newb.txt /F /Q
setlocal enabledelayedexpansion
set /a LineA=0
set /a LineB=0
for /F "delims=" %%B in (b.txt) do (
set /a LineB+=1
if !LineB! equ 3 (
for /f "delims=" %%A in (a.txt) do (
set /A LineA+=1
if !LineA! equ 2 (echo(%%B>>Newb.txt) else (echo(%%A>>Newb.txt)
)
goto :Done
)
)
:Done
endlocal
使用
sed
请尝试以下操作:
$a = Get-Content a.txt
$b = Get-Content b.txt
$a[1] = $b[2]
$a | Set-Content a.txt
sed -i "2c $(sed -n 3p b.txt)" a.txt
结果:
hi
grape
bye
- 内部命令
提取sed-n3p b.txt
的第三行b.txt
- 命令子项
由命令输出替代$(command)
- 然后,b.txt的第3行用作
命令的替换文本c