como inserir o conteúdo do arquivo na correspondência usando sed - somente a primeira ocorrência [duplicado]

1

conteúdo do arquivo:

# cat file.txt 
-----
MATCH
-----
MATCH
-----
MATCH
-----

# cat text.txt 
add this text file
before first match

comandos sed:

# sed '0,/MATCH/r text.txt' file.txt
-----
add this text file
before first match
MATCH
add this text file
before first match
-----
MATCH
-----
MATCH
-----

# sed '0,/MATCH/i prependme once' file.txt
prependme once
-----
prependme once
MATCH
-----
MATCH
-----
MATCH
-----

Estou tentando mesclar esses comandos de alguma forma para obter a seguinte saída:

-----
add this text file
before first match
MATCH
-----
MATCH
-----
MATCH
-----
    
por Zell 16.07.2016 / 00:28

2 respostas

4

Com ed em vez de sed

ed -s << EOF file.txt
0,/MATCH/-1 r text.txt
,p
q
EOF

ou como um one-liner

printf '0,/MATCH/-1 r text.txt\n,p\nq' | ed -s file.txt
-----
add this text file
before first match
MATCH
-----
MATCH
-----
MATCH
-----

(substitua ,p por w para edição no local).

    
por 16.07.2016 / 00:46
1

Tente isso

$ sed '0,/MATCH/ s/MATCH/add this text file\nbefore first match\nMATCH/' file.txt

ou apenas use outra expressão sed para sua saída

$ sed '0,/MATCH/i prependme once' file.txt | sed 1d

para adicionar conteúdo de arquivo

$ sed -e '0,/MATCH/s/MATCH/$(cat text.txt)\nMATCH/' file.txt

Outra solução possível usando ----- como sua string correspondente

$ sed '0,/-----/r text.txt' file.txt
    
por 16.07.2016 / 00:40