sed并将变量作为insert和append的搜索项传递

时间:2016-06-18 21:42:40

标签: bash sed

我正在尝试专门使用插入行之前和行之后插入模式匹配路径。

到目前为止,我发现的所有例子都只提到替换。 如何在行之前和之后正确传递/读取变量?

我正在做的示例布局显然失败了:

Function0[Function2[Int, Int, Int]

请求前后:(线条保持不变,因此之前和之后都相同)

path="/home/pi/eqserver/source"
sed "/\$path/i <br>\n<span style="color:white">" ./input_file> ./output_file

底部的span标签可以从完全不同的工作模式匹配中获得。这不是这种模式的结果。我只是把它作为参考。

包含路径的每一行都会有不同的内容,但路径将始终相同。 我正在将所有行从make输出转换为他们自己的跨度。 它是构建输出的浏览器友好视图的一部分。

每个请求的预期输出:

<br>
    Fri 17 Jun 2016 05:22:48 PM PDT:  In file included from /home/pi/eqserver/source/common/patches/mac.cpp:112:0:
    Fri 17 Jun 2016 05:22:48 PM PDT:  /home/pi/eqserver/source/common/patches/ss_define.h:151:0: warning: "DECODE_LENGTH_ATLEAST" redefined
<br>
<span style="color:white">

使用此解决方案,第二个sed将添加结束范围。

2 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed -e '\#/file/path#i above' -e '//a below' file

N.B。文件路径的替代分隔符\#...#和两个表达式(-e),以满足隐式换行符结束ia命令。

答案 1 :(得分:1)

看起来你几乎就在那里。

看起来你的#1问题是$ path中的元字符。

$: path=$( echo "/home/pi/eqserver/source" | sed 's/\//\\\//g' )
$: sed "/$path/i <br>\n<span style=\"color:white\">" ./input_file 
<br>
<br>
<span style="color:white">
    Fri 17 Jun 2016 05:22:48 PM PDT:  In file included from /home/pi/eqserver/source/common/patches/mac.cpp:112:0:
<br>
<span style="color:white">
    Fri 17 Jun 2016 05:22:48 PM PDT:  /home/pi/eqserver/source/common/patches/ss_define.h:151:0: warning: "DECODE_LENGTH_ATLEAST" redefined
<br>
<span style="color:white">