sedを使用して一致時にファイルの内容を挿入する方法 - 最初の発生のみ

sedを使用して一致時にファイルの内容を挿入する方法 - 最初の発生のみ

文書の内容:

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

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

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
-----

私は次のような出力を得るために何らかの方法でこれらのコマンドを組み合わせようとしています。

-----
add this text file
before first match
MATCH
-----
MATCH
-----
MATCH
-----

答え1

...を使用してed交換sed

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

または一行で

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

(内部編集,pに置き換えられます)w

答え2

この試み

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

または、他のsed式を出力として使用します。

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

ファイルの内容を追加するために使用されます。

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

-----一致する文字列として使用できる他のソリューション

$ sed '0,/-----/r text.txt' file.txt

関連情報