【问题标题】:How can I use a command output as a input string in the command "sed -i '10istring' a.txt"如何在命令“sed -i '10istring' a.txt”中使用命令输出作为输入字符串
【发布时间】:2020-04-25 06:11:45
【问题描述】:

我有 2 个文件。

一个.txt

你好

再见

b.txt

苹果

香蕉

葡萄

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

一个.txt

葡萄

再见

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

到目前为止,我已经得到了一些类似下面的“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

我认为的方法可行吗?还是我有错误的方法? 有什么解决办法吗?

【问题讨论】:

    标签: batch-file sed replace


    【解决方案1】:

    在 PowerShell 中,您可以执行以下操作:

    $a = Get-Content a.txt
    $b = Get-Content b.txt
    $a[1] = $b[2]
    $a | Set-Content 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"
    

    【讨论】:

    • 谢谢。蝙蝠呢?其实我在powershell上测试,但是脚本在bat上工作
    • @StevenLim 您可以从批处理文件中调用 powershell。我发布了一个例子。
    【解决方案2】:

    课堂作业?如果是这样……请确保您全部了解! 这将满足您对纯蝙蝠的要求。除空白行外的所有其他行也将被复制。 如果有,这将不起作用!或文件 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
    

    【讨论】:

    • 谢谢你的知识,我一定会试试这个!
    【解决方案3】:

    sed 请尝试以下操作:

    sed -i "2c $(sed -n 3p b.txt)" a.txt
    

    结果:

    hi
    grape
    bye
    
    • 内部命令sed -n 3p b.txt提取b.txt的第3行。
    • 命令替换 $(command) 被命令输出替换。
    • 然后将 b.txt 的 line3 用作c 命令的替换文本。

    【讨论】:

    • @StevenLim 感谢您的反馈。很高兴知道它有效。如果您觉得我的回答很好地解决了您的问题,如果您可以通过单击答案旁边的复选标记来接受我的回答,我将不胜感激。问候。
    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 2011-09-13
    • 2018-11-25
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多