文件内容:
# 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