Batch file 如何将命令输出用作命令中的输入字符串;sed-i';10istring';a、 txt";

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”部分,

我有两个文件

a、 文本

你好

再见

b、 文本

苹果

香蕉

葡萄

每天我都要将a.txt的第2行替换为b.txt的第3行 所以结果应该是

a、 文本

葡萄

再见

这两个文件的内容每天都会被其他逻辑更改 所以我不能简单地搜索模式, 但我应该取代的那一行永远不会改变

到目前为止,我已经得到了一些“sed”命令,如下所示

$> 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
    命令的替换文本

谢谢。蝙蝠怎么样?事实上,我正在powershell上测试,但脚本可以正常工作bat@StevenLim您可以从批处理文件调用powershell。我贴了一个例子。谢谢你的知识,我一定会试试这个@史蒂文利姆感谢您的反馈。很高兴知道它有效。如果你觉得我的答案很好地解决了你的问题,如果你能点击答案旁边的复选标记接受我的答案,我将不胜感激。当做