![如何使用 sed 在匹配时插入文件内容 - 仅第一次出现](https://linux22.com/image/90602/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E5%9C%A8%E5%8C%B9%E9%85%8D%E6%97%B6%E6%8F%92%E5%85%A5%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%20-%20%E4%BB%85%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%87%BA%E7%8E%B0.png)
文件内容:
# 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