gpt4 book ai didi

regex - 如何删除当前行中的最后一个单词,但前提是下一行出现模式?

转载 作者:行者123 更新时间:2023-12-02 08:29:23 27 4
gpt4 key购买 nike

文件内容为

some line DELETE_ME
some line this_is_the_pattern

如果 this_is_the_pattern 出现在next 行中,则删除当前行中的最后一个单词(在本例中为 DELETE_ME)。

我如何使用 sed 或 awk 执行此操作?我的理解是 sed 比 awk 更适合这个任务,因为 awk 适合对以表格格式存储的数据进行操作。如果我的理解不正确,请告诉我。

最佳答案

$ awk '/this_is_the_pattern/{sub(/[^[:space:]]+$/, "", last)} NR>1{print last} {last=$0} END{print last}' file
some line
some line this_is_the_pattern

工作原理

此脚本使用一个名为 last 的变量,它包含文件中的前一行。总之,如果当前行包含该模式,则从 last 中删除最后一个单词。否则,last 将按原样打印。

详细来说,依次执行每个命令:

  • /this_is_the_pattern/{sub(/[^[:space:]]+$/, "", last)}

    如果这一行有模式,从最后一行中删除最后一个词。

  • NR>1{print last}

    对于第一行之后的每一行,打印最后一行。

  • last=$0

    将当前行保存在变量last中。

  • END{print last}

    打印文件的最后一行。

关于regex - 如何删除当前行中的最后一个单词,但前提是下一行出现模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28719659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com