gpt4 book ai didi

linux - 如何使用 sed 在一行中多次出现的两个模式之间搜索文本?

转载 作者:太空狗 更新时间:2023-10-29 12:12:13 25 4
gpt4 key购买 nike

我有一个这样的文件:

“这是一个示例文件,用于在一行中查找 p1 (第一个模式)和 p2(第二个模式)之间的文本,我们可以在其中多次出现p1 后跟 p2,我只希望 p1 p2 之间的文本在同一行中。"

我想像下面这样打印输出: (第一个模式)然后是 and

我试试命令

cat 文件名 | sed -e 's/.*p1\(.*\)p2.*/\1/g'

但它只打印出最后一个,如:

提前致谢

最佳答案

如果你有 GNU grep,你可以使用 perl 兼容的正则表达式:

grep -oP 'p1\K.+?(?=p2)' filename

解释:

  • \Kp1 匹配后重置匹配。这将阻止 p1 被包含在匹配结果中。
  • .+? 匹配一个或多个任意字符 - ungreedy,意思是直到最近出现的 p2
  • (?=p2) 是先行断言。这意味着之前的模式是 .+? 需要跟随 p2

关于linux - 如何使用 sed 在一行中多次出现的两个模式之间搜索文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084698/

25 4 0
文章推荐: linux - 模式切换是否发生从用户线程切换到内核线程?
文章推荐: Linux查找命令并同时复制和重命名它们
文章推荐: javascript - 如何让