我有一些文件:
aaaaaaaaaa
# Lines Start #
bbbbbbbbb
cccccccc
dddddddddd
# Lines End #
eeeeeeeeee
一些变量$newLines="new line"
如何使用sed将变量值从# Lines Start #
替换为# Lines End #
(包括那些行本身)。
所以我会得到:
aaaaaaaaaa
new line
eeeeeeeeee
我尝试过使用:sed -E 'N; s/# Lines Start #\.*\# Lines End #/$newLines/'
但它没有做到这一点。
答案 0 :(得分:2)
以下是sed
的一种方式:
sed '/# Lines Start #/,/# Lines End #/{
/# Lines End #/!d
s/# Lines End #/new line/
}' file
aaaaaaaaaa
new line
eeeeeeeeee
new line
答案 1 :(得分:2)
如果您想尝试,可以使用awk
:
awk '/# Lines Start #/ {f=1} !f; /# Lines End #/ {print "new line";f=0}' file
aaaaaaaaaa
new line
eeeeeeeeee
您也可以使用sed
中的范围,但其灵活性较差,因此我正常避免使用范围功能。
awk '/# Lines Start #/,/# Lines End #/ {if (!a++) print "new line";next}1' file
aaaaaaaaaa
new line
eeeeeeeeee
答案 2 :(得分:1)
这可能适合你(GNU sed):
var='first line\
second line\
third'
# N.B. multilines must end in "\" except for the last line
sed '/# Lines Start #/,/# Lines End #/c\'"$var" file