我有一个包含很多字符串的Filename,但我只需要剪切特定的名称,并从字符串中排除其他垃圾
文件示例:
FAILED, see /release/jenkins/workspace/Build/RELEASE/logs/component.jdfmfh_value_javac10+.log
FAILED, see /release/jenkins/workspace/Build/RELEASE/logs/component.jadxfh_value_javac10+.log
FAILED, see /release/jenkins/workspace/Build/RELEASE/logs/component_value_javac10+.log
FAILED, see /release/jenkins/workspace/Build/RELEASE/logs/component_value_javac10+.log
FAILED, see /release/jenkins/workspace/Build/RELEASE/logs/component.jdfmfh_value_javac10+.log
因此,我需要得到如下结果:
component.jdfmfh
component.jadxfh
component
component
component.jdfmfh
我写了一个小的perl表达式,得到了接近的结果,但是我不知道如何从那里排除所有的_value_javac10+.log
行。
perl -pe 's/^.*\/logs\///;' Filename
另外,如果有一种方法可以通过sed
来实现,那对我来说也是可行的
6条答案
按热度按时间iswrvxsc1#
使用任何sed:
如果你的输入中有任何行与该正则表达式不匹配,所以你不想打印,然后调整它:
s1ag04yj2#
使用
sed
lmvvr0a83#
要同时删除最后一个零件,您需要匹配所有零件,只保留所需的零件:
()中的部分将是您仍然想要的部分,输出$1。
k2fxgqgv4#
如前所述,您的目标Perl解决方案是
但你也可以用
x一个一个一个一个x一个一个二个一个x一个一个三个一个
c7rzv4ha5#
我将按照以下方式利用GNU
AWK
完成此任务,让file.txt
内容那么
给出输出
说明:我通知GNU
AWK
字段分隔符(FS
)是斜线,然后对于每一行,我在最后一个字段($NF
)中使用空字符串替换_
和所有后续字符(即删除它们),然后print
表示字段。snz8szmq6#
请使用您展示的样品尝试以下解决方案。
***第一个解决方案:***使用GNU
awk
及其match
函数,该函数将捕获组创建到数组arr中,并根据要求打印其第一项。***第二个解决方案:***此处使用GNU
grep
和regex来获得所需的输出。***第三种解决方案:***使用字段分隔符
/
,使用_
拆分最后一个字段,并根据需要的输出打印数组的第一个元素。