使用shell脚本中的sed将匹配的文本替换为另一个文件的内容

时间:2017-10-03 10:26:22

标签: shell awk sed makefile

我有一个调用shell脚本的Makefiel。在该shell脚本中,我有以下sed命令:

sed -e '/.section\t.text/{' -e 'r anotherfile.s' -e  'd' -e '}' input.s > output.s

哪个不起作用。 当我直接将它运行到终端时它工作正常。 我想搜索一行" .section .text"在文件中,并将其替换为另一个文件。 这有什么不对?

input.s

    .section    .data
    .addressing Word
_A: 
    .data.32    0
    .section    .text
    .addressing Word

_main:  
    LW  %GPR27, _C(%GPR0)
    NOP

anotherfile.s

    .addr_space 32  ; address space is 2^32
    .addressing Byte    ; byte addressing          (default)
    .bits_per_byte  8   ; 1 byte consists of 8 bit (default)
    .endian     Big ; Big endian (default)

    .section    .text
    .org 0x00000000

output.s(应该是这样的)

    .section    .data
    .addressing Word
_A: 
    .data.32    0
    .addr_space 32  ; address space is 2^32
    .addressing Byte    ; byte addressing          (default)
    .bits_per_byte  8   ; 1 byte consists of 8 bit (default)
    .endian     Big ; Big endian (default)

    .section    .text
    .org 0x00000000
    .addressing Word

_main:  
    LW  %GPR27, _C(%GPR0)
    NOP

1 个答案:

答案 0 :(得分:1)

sed用于执行s / old / new,完全是。这不是你正在做的事情所以你不应该使用sed而不是尝试调试你不应该做的事情,只需使用awk:

awk '
NR==FNR { rep = (rep=="" ? "" : rep ORS) $0; next }
/\.section\t\.text/ { $0 = rep }
{ print }
' anotherfile.s input.s > output.s