gpt4 book ai didi

linux - egrep AND 多个模式的条件不起作用

转载 作者:行者123 更新时间:2023-12-04 18:59:51 24 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.


1年前关闭。







Improve this question




egrep AND 条件无法使用以下命令处理日志文件:
我的命令是:

egrep -E "20-Sep-20|^[ ]*|^[ ]*21-Sep-20.*6f0747e47829.*oMXskCaN0RWrdfT" file.log
结果:

21-Sep-20 14:30:40.223 DEBUG 6f0747e47829 QzAJ7ru4ayOWqRmoMXskCaN0RWrdfT prep - ************** END ***************
21-Sep-20 14:30:40.223 INFO 6f0747e47829 QzAJ7ru4ayOWqRm
oMXskCaN0RWrdfT prep - Data Prep Step
ENDED
**** 21-Sep-20 14:30:40.273 INFO 6f0747e47829QzAJ7ru4ayOWqRm oMXskCaN0RWrdfT prep - dependency step has beenremoved with step_id = 9l2CDtSl2ZmTOUk 21-Sep-20 14:30:40.439 INFO
6f0747e47829 QzAJ7ru4ayOWqRm oMXskCaN0RWrdfT prep - Step runcompleted: success=True 22-Sep-20 14:30:40.500 INFO 6f0747e47829QzAJ7ru4ayOWqRm oMXskCaN0RWrdfT prep - dependency step has beenremoved with step_id = 9l2CDtSl2ZmTOUk 22-Sep-20 14:30:40.560 INFO
6f0747e47829 QzAJ7ru4ayOWqRm oMXskCaN0RWrdfT prep - Step runcompleted: success=True 22-Sep-20 14:30:40.600 ERROR 6f0747e47829QzAJ7ru4ayOWqRm oMXskCaN0RWrdfT- Traceback (most recent call last):
File"/usr/local/lib/python3.7/site-packages/wiz_task/tasks/modeling/py_module.py",line 55, in run_py_module(success, reports) = instance.execute(project_id, process_id, module_name, step_name, run_params, **kwargs) File"/code/test_module/domkar/py_code/python-attributor/attributor/module.py",line 62, in executemodel2_out.main() File "/code/test_module/domkar/py_code/python-attributor/attributor/model/model2.py",line 883, in mainmodel_constr,FixedCoeffTable,planner,Output_data=self.model () File"/code/test_module/domkar/py_code/python-attributor/attributor/model/model2.py",line 503, in modelmodel_constr_res = model_constr_worker.runSingleModel (cmodel_trfm_data_ref, model_constr, False) File"/code/test_module/domkar/py_code/python-attributor/attributor/lib/algo/model_worker.py",line 1283, in runSingleModelmodel_result = self.runMixedModel (data, model, light_mode) File "/code/test_module/domkar/py_code/python-attributor/attributor/lib/algo/model_worker.py",line 625, in runMixedModelreturn self.runLinearModel (data, model, light_mode) File "/code/test_module/domkar/py_code/python-attributor/attributor/lib/algo/model_worker.py",line 597, in runLinearModelresult.setRetention (DataUtility.retention (data, dep_var, date_var, fixed_vars, model.getHierarchyVars ()) ) File"/code/test_module/domkar/py_code/python-attributor/attributor/lib/data/data_utility.py",line 396, in retentionaaaaaaaaaaaaaaaaaaaa NameError: name 'aaaaaaaaaaaaaaaaaaaa' is not defined 23-Sep-20 14:30:40.439 INFO 6f0747e47829 QzAJ7ru4ayOWqRmoMXskCaN0RWrdfT prep - Step run completed: success=True


预期结果:
当给定一个无效的字符串(模式)AND条件失败并仍然返回结果但我需要空结果。因为给定的模式与文件不匹配。

最佳答案

根据您的评论,您正在尝试匹配两个模式之间的所有行。这对于 grep 是不可能的,因为 grep 逐行工作。您可以匹配一行,但到下一行时,grep 无法仅根据它之前是否匹配来知道它是否应该匹配。
您所做的不是“与条件”,我无法理解您的意思。 Perl 正则表达式有一种“AND”子句(称为前瞻),但它的意思是“此时,下一个字符应该匹配这个模式和另一个模式”(前瞻比那个更微妙但我正在简化)。没有办法将它用于你想要的。
为了学习,让我们分析一下你的模式:

20-Sep-20|^[ ]*|^[ ]*21-Sep-20.*6f0747e47829.*oMXskCaN0RWrdfT
|字符表示“ ”。因此,您正在匹配与以下 3 种模式之一匹配的任何行:
20-Sep-20
^[ ]*
^[ ]*21-Sep-20.*6f0747e47829.*oMXskCaN0RWrdfT
第二种模式表示“任何非空格字符在行首任意次数(包括零)”。这符合一切。因此 grep 将匹配您输入的每一行,并按原样输出。

您真正想要的是“匹配这一行,后跟任意数量的字符(包括换行符),然后是这一行”。没有“AND”,这是一个单一的模式。但它需要一次应用于多行,而 grep 无法做到这一点。
但是,有一些方法可以使用其他程序来做到这一点。下面是一个 awk 的例子:
awk '/20-Sep-20/ { a=1 } ; { if (a == 1) print } ; /^[ ]*21-Sep-20.*6f0747e47829.*oMXskCaN0RWrdfT/ { exit }' file.log
我在这里做的是逐句声明:
  • 在匹配“20-Sep-20”的行上,我将变量“a”设置为 1。
  • 在所有行中,如果 "a"为 1
  • ,则打印该行
  • 在线匹配 "^[ ]*21-Sep-20.*6f0747e47829.*oMXskCaN0RWrdfT",退出(因此停止打印)

  • 如果第二个模式不匹配,命令不应该返回任何内容,我看到的最明显的解决方案是首先对其进行 grep,然后仅在匹配时执行 awk 。
    end_pattern='^[ ]*21-Sep-20.*6f0747e47829.*oMXskCaN0RWrdfT'
    grep -qE "$end_pattern" file.log && awk "/20-Sep-20/ { a=1 } ; { if (a == 1) print } ; /$end_pattern/ { exit }" file.log
    如果在第一个模式之前找到第二个模式,那将不起作用。
    我看到实现此目的的另一种完全不同的方法是使用 grep 选项“-n” grep 开始行和结束行以获取行号,然后使用 head 和 tail(或 sed)来获取范围(如果两个模式匹配,和结束>开始)。
    第三种方法是使用支持多行正则表达式的编程语言。

    关于linux - egrep AND 多个模式的条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64045088/

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