如何使用 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
-----

(替换,pw就地编辑)。

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

相关内容