sed 将行添加到范围末尾或文件末尾

问题描述 投票:0回答:1

我正在尝试使用 sed 在范围末尾添加一个字符串。

$ cat test.fl
TITLE OF FILE

first 1
second 2
third 3
fourth 4
fifth 5
sixth 6
seventh 7
eighth 8
ninth 9
first 1.1
second 1.2
third 1.3
fourth 1.4
fifth 1.5
sixth 1.6
seventh 1.7
eighth 1.8
ninth 1.9

我需要在范围末尾添加一行。让范围受到单词

first
和数字的限制,那么我想得到类似的东西:

TITLE OF FILE

first 1
second 2
third 3
fourth 4
fifth 5
sixth 6
seventh 7
eighth 8
ninth 9
zero 0

first 1.1
second 1.2
third 1.3
fourth 1.4
fifth 1.5
sixth 1.6
seventh 1.7
eighth 1.8
ninth 1.9

我尝试使用这样的结构

sed -e "/^first.*1$/,/^first.*/ { /^first.*1$/! {/^first.*/izero 0" -e "}}" ./test.fl

/^first.*1$/,/^first.*/
- 范围从 first 1first 1.1
{ /^first.*1$/!
- 不申请起始范围线;
{/^first.*/izero 0\n" -e "}
- 在第一个 1.1 行“零 0”之前添加

但不为我工作。当然,添加的行中将使用变量。

实验表明,有范围下限还是文件结尾还是有区别的。我希望能够在这两种情况下添加一个字符串。我尝试的越多,我就越困惑。

sed sh
1个回答
0
投票
这可能对你有用(GNU sed):

sed ':a;/first/{:b;n;//!bb;s/.*/zero 0\n\n&/;ba}' file
找到包含 

first

 的行,打印并获取下一行。

重复直到另一行包含

first

,然后使用替换,插入一行 
zero 0
 和一个空行。

重复。

© www.soinside.com 2019 - 2024. All rights reserved.