首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >awk/sed/grep用于在第二个分号分隔的部分/列的字符串中搜索子字符串,并仅返回第一部分/列以及该子字符串

awk/sed/grep用于在第二个分号分隔的部分/列的字符串中搜索子字符串,并仅返回第一部分/列以及该子字符串
EN

Stack Overflow用户
提问于 2020-11-02 20:51:52
回答 4查看 58关注 0票数 0

我有一个Unix文件,其中包含分号分隔的记录,如下所示,第二部分/列包含一个带有逗号分隔值的字符串,如下所示:

代码语言:javascript
运行
复制
789651234512;TEST-10=5,TEST-136=6,TEST-3=1,TEST-4=2,TEST-5=3,TEST-9=4,TEST-9013=100
132567123784;TEST-3=1,TEST-136=5,TEST-15=4,TEST-4=2,TEST-5=3
132564013784;TEST-3=1,TEST-15=4,TEST-4=2,TEST-5=8
132496583212;TEST-13=4,TEST-136=7,TEST-23=1,TEST-6=2,TEST-5=3,TEST-4=5,TEST-6=11

我希望找到所有TEST-136=X,如果存在,其中X可以是从1到最多3位的任何整数,并像上面的示例那样返回它们:

代码语言:javascript
运行
复制
789651234512;TEST-136=6
132567123784;TEST-136=5
132496583212;TEST-136=7

我使用的是下面的awk,但它返回了完整的第二部分/列的字符串:

代码语言:javascript
运行
复制
awk -F'[;]' '/TEST-136/{ print $1";"$2 }' file.txt

然而,我只需要得到第一部分/列和第二部分/列的TEST-136=X部分,如上所述。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-11-02 21:30:54

假设每行/记录有一个匹配项。

代码语言:javascript
运行
复制
$ awk -F';' 'match($0, /TEST-136=[[:digit:]]+/) {print $1, substr($0,RSTART,RLENGTH)}' OFS=';' kostas.txt
789651234512;TEST-136=6
132567123784;TEST-136=5
132496583212;TEST-136=7
票数 1
EN

Stack Overflow用户

发布于 2020-11-03 10:12:55

这可能适用于您(GNU sed):

代码语言:javascript
运行
复制
sed -En 's/^([^;]*;).*(TEST-136=[^,]*).*/\1\2/p' file
票数 0
EN

Stack Overflow用户

发布于 2020-11-03 11:15:04

简单的Perl,

代码语言:javascript
运行
复制
$ perl -F";" -lane ' /(TEST-136=\w+)/ and print "$F[0];$1" ' kostas.txt
789651234512;TEST-136=6
132567123784;TEST-136=5
132496583212;TEST-136=7
$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64645958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档