Attribute47 2021-06-03 21:04 采纳率: 0%
浏览 19

linux中的匹配问题

--- org.apache.commons.lang.text.StrBuilderTest::testIndexOfLang294
junit.framework.AssertionFailedError: expected:<-1> but was:<6>
	at junit.framework.Assert.fail(Assert.java:57) # 需匹配行
	at junit.framework.Assert.failNotEquals(Assert.java:329)
	at junit.framework.Assert.assertEquals(Assert.java:78)
	at junit.framework.Assert.assertEquals(Assert.java:234)
    ...
--- org.apache.commons.lang.text.StrBuilderTest::testLang294
java.lang.ArrayIndexOutOfBoundsException
	at java.lang.System.arraycopy(Native Method)
	at org.apache.commons.lang.text.StrBuilder.deleteImpl(StrBuilder.java:1114) # 需匹配行
	at org.apache.commons.lang.text.StrBuilder.deleteAll(StrBuilder.java:1188)
	at org.apache.commons.lang.text.StrBuilderTest.testLang294(StrBuilderTest.java:1734)
    ...
--- org.apache.commons.lang.EntitiesTest::testNumberOverflow
junit.framework.ComparisonFailure: expected:<[&#12345678;]> but was:<[慎]>
	at junit.framework.Assert.assertEquals(Assert.java:100) # 需匹配行
	at junit.framework.Assert.assertEquals(Assert.java:107)
	at junit.framework.TestCase.assertEquals(TestCase.java:269)
	at org.apache.commons.lang.EntitiesTest.doTestUnescapeEntity(EntitiesTest.java:101)
	at org.apache.commons.lang.EntitiesTest.testNumberOverflow(EntitiesTest.java:201)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    ...

一个文件n段错误信息,匹配每段第一个 at 所在行,但排除特定字符,例如:Native Method

自己尝试用 grep 始终写不好,希望大佬给点建议,难道只能通过多次匹配实现吗

  • 写回答

2条回答 默认 最新

  • lshen01 2023-03-17 13:37
    关注

    参考GPT和自己的思路:

    可以使用 grep 命令结合正则表达式来实现这个匹配过程。具体步骤如下:

    1. 使用 grep 命令匹配所有包含 at 的行,并将结果保存至临时文件:
    grep "at " [文件名] > temp.txt
    
    1. 使用 grep 命令结合正则表达式来过滤特定字符,例如:Native Method。这里使用的正则表达式是 ^((?!Native Method).)*$,意思是匹配不包含 Native Method 的所有字符。将结果保存至临时文件 temp_filtered.txt:
    grep -E '^((?!Native Method).)*$' temp.txt > temp_filtered.txt
    
    1. 使用 sed 命令来提取每段第一个匹配的行:
    sed -n '0,/at /!d;/Native Method/d;p;q' temp_filtered.txt
    

    解释一下上面的 sed 命令:

    • -n 表示关闭默认输出,只输出经过处理后符合条件的行。
    • 0,/at /!d; 表示删除第一行到第一个包含 at 的行之间的所有行。
    • /Native Method/d; 表示删除所有包含 Native Method 的行。
    • p;q 表示打印符合条件的第一行,并退出。

    最终的命令如下:

    grep "at " [文件名] | grep -E '^((?!Native Method).)*$' | sed -n '0,/at /!d;/Native Method/d;p;q'
    

    这样就可以实现一次匹配得到每段第一个匹配的行,并排除特定字符。

    评论

报告相同问题?