"之间的文本-6ren"> "之间的文本-我有以下形式的一些示例数据,需要从中提取电子邮件地址: from= (/ {print $7}' mail.log 但是,这只是找到与正则表达式匹配的字符串。 当要打印出来时,它仍然会打印出整个内容(-6ren">
gpt4 book ai didi

regex - 在 awk 中打印 "<"和 ">"之间的文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:58 25 4
gpt4 key购买 nike

我有以下形式的一些示例数据,需要从中提取电子邮件地址:

from=<user@mail.com> (<-- note that this corresponds to $7)
...
...

目前我正在使用这个:

awk '/from=<.*>/ {print $7}' mail.log

但是,这只是找到与正则表达式匹配的字符串。

当要打印出来时,它仍然会打印出整个内容(就像在第一个文本框中一样)。

最佳答案

您可以使用 gsub删除<周围的一切和 > :

awk '{gsub(/(^[^<]*<|>.*$)/, "", $7)}1' file

这里的重点是(^[^<]*<|>.*$) , 一个可以分成两个 block 的正则表达式 --> (A|B) :

  • ^[^<]*<从字段开头到 < 的所有内容.
  • >.*$一切来自>直到场的尽头。

测试

$ cat a
1 2 3 4 5 6 from=<user@mail.com> 8
1 2 3 4 5 6 <user@mail.com> 8
$ awk '{gsub(/(^[^<]*<|>.*$)/, "", $7)}1' a
1 2 3 4 5 6 user@mail.com 8
1 2 3 4 5 6 user@mail.com 8

关于regex - 在 awk 中打印 "<"和 ">"之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830371/

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