如何使用ed在最后一次模式匹配后添加文本

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

这是我在first模式之前添加文本的方式,我想在last模式

之后添加
FILE_NAME="folder/myfile.c++"
STR_TO_ADD="string that i want to add"
PATTERN="banana"
ed $FILE_NAME 2>NULL 1>NULL<<EOF
/^$PATTERN
-1
a
$STR_TO_ADD
.
wq
EOF

文件

banana
apple
banana
one
two
three

预期输出

banana
apple
banana
string that i want to add
one
two
three
linux bash ed
2个回答
1
投票

转到文件的最后一行并向后搜索模式。

FILE_NAME="folder/myfile.c++"
STR_TO_ADD="string that i want to add"
PATTERN="banana"
ed $FILE_NAME 2>NULL 1>NULL<<EOF
$
?^$PATTERN
a
$STR_TO_ADD
.
wq
EOF

$文件的最后一行。?^$PATTERN从当前行向后搜索。


0
投票

user0的解决方案已经结束,但是如果最后一个匹配项位于文件的最后一行,它将找到前一个。相反,转到first行并向后搜索:

1
?^$PATTERN
a
$STR_TO_ADD
.

几天前我just posted this on my @ed1conf account,所以在我的脑海中是新鲜的。

此外,如果您要添加之前文本(您已有的示例),则如果第一个匹配项位于第一行,则会失败,因为“ @ed1conf”在文件。而是使用“ -1”命令插入文本,而不是附加文本:

i

[您可能还需要确保“ $ /^$PATTERN i $STR_TO_ADD . ”不包含任何包含单个句点的行,否则变量扩展会过早终止$STR_TO_ADD插入(或i待定)。

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