gpt4 book ai didi

regex - 管道连接到 grep 并使用正则表达式

转载 作者:行者123 更新时间:2023-11-29 08:52:20 25 4
gpt4 key购买 nike

基本上我想做的是解析文件中的行并返回用户名。用户名总是包含在 < 和 > 中,所以我想使用正则表达式来匹配 < 之前(包括)和之后(包括)> 的所有内容,然后反转我的匹配。我知道 grep -vE 应该能够做到这一点。

到目前为止,我的脚本看起来有点像这样:

#!/bin/bash
while read line; do
echo $line | grep -vE '(.*<)|(>.*)'
done < test_log

test_log 由以下内容组成:

Mar  1 09:28:08 (IP redacted) dovecot: pop3-login: Login: user=<emcjannet>, method=PLAIN, rip=(IP redacted), lip=(IP redacted)
Mar 1 09:27:53 (IP redacted) dovecot: pop3-login: Login: user=<dprotzak>, method=PLAIN, rip=(IP redacted), lip=(IP redacted)
Mar 1 09:28:28 (IP redacted) dovecot: imap-login: Login: user=<gconnie>, method=PLAIN, rip=(IP redacted), lip=(IP redacted), TLS
Mar 1 09:27:25 (IP redacted) dovecot: imap-login: Login: user=<gconnie>, method=PLAIN, rip=(IP redacted), lip=(IP redacted), TLS

但是,当我运行我的脚本时,没有返回任何内容,尽管当我在像 regexpal 这样的带有逆匹配的东西中测试正则表达式时,它完全符合我的要求。我做错了什么?

最佳答案

试试这个 grep 行:

grep -Po "(?<=<)[^>]*"

或更安全:

grep -Po "(?<=user=<)[^>]*"

编辑

简短的解释

-P perl-regex
-o only matching
you can get above info from man page
(?<=foo)bar look-behind assertion. matches bar, only if bar is following foo.
[^>]* any not > characters.

关于regex - 管道连接到 grep 并使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15162904/

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