【问题标题】:How to add text after last pattern match using ed如何使用 ed 在最后一次模式匹配后添加文本
【发布时间】:2019-07-08 10:12:03
【问题描述】:

这就是我在 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


【解决方案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 从当前行向后搜索模式。

【讨论】:

    【解决方案2】:

    user0 的解决方案很接近,但是如果最后一个匹配落在文件的最后一行,它会找到前一个。相反,请转到 第一行 并向后搜索:

    1
    ?^$PATTERN
    a
    $STR_TO_ADD
    .
    

    几天前我just posted this on my @ed1conf account,所以我很新鲜。

    此外,如果您尝试在文本之前添加(您已经拥有的示例),如果第一个匹配项位于第一行,它将失败,因为“-1”消失了在文件开始之前。相反,使用“i”命令插入文本而不是追加:

    $
    /^$PATTERN
    i
    $STR_TO_ADD
    .
    

    您可能还需要确保“$STR_TO_ADD”不包含任何包含单个句点的行,否则变量扩展将过早终止insertion(或aappending)。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多