首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grep第n个元素

问Grep第n个元素
EN

Stack Overflow用户
提问于 2018-06-13 19:59:03
回答 4查看 86关注 0票数 0

我有一个日志文件,需要在其中grep一些特定字段。

日志文件使用空格分隔各行中的元素,但一行也可以包含带引号的句子。我需要grep第n个元素。

文件中的一行可能如下所示:

代码语言:javascript
复制
2018-05-01 12:05:16 9 10.10.10.20 ab bc - - foobar - "bar foo" - "barbar foo" cd ed
2018-05-01 12:05:16 9 10.10.20.20 ab bc - - foobar - "barfoo" abc "barbar foo" cd ed

我想要grep第13个元素,第一行是"barbar foo“,第二行是"abc foo”

所以一个

代码语言:javascript
复制
cut -d " " -f 13 

不会这样做,因为第一行第11个元素有"bar foo“,第二行第11个元素是"barfoo”

希望这是有意义的!感谢所有的帮助

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-13 20:01:53

使用GNU awk:

代码语言:javascript
复制
$ awk 'BEGIN{FPAT="([^ ]*)|(\"[^\"]+\")"}{print $13}' file
"barbar foo"
"barbar foo"

更多关于FPAT here的信息。

票数 3
EN

Stack Overflow用户

发布于 2018-06-13 20:06:53

使用Perl:

代码语言:javascript
复制
$ perl -nE 'my @p = /"[^"]*"|[^\s"]\S*/g; say $p[12]' file
"barbar foo"
"barbar foo"

如果带引号的部分可以包含转义引号(\"),则需要

代码语言:javascript
复制
$ perl -nE 'my @p = /"(?:[^"\\]|\\.)*"|[^\s"]\S*/g; say $p[12]'
票数 2
EN

Stack Overflow用户

发布于 2018-06-13 20:38:49

使用GNU grep

代码语言:javascript
复制
grep -Po '^([^" ]+ |"[^"]*" ){12}\K([^" ]+|"[^"]*")' file 

或者更便携的sed

代码语言:javascript
复制
sed -En 's/^([^" ]+ |"[^"]*" ){12}([^" ]+|"[^"]*").*$/\2/p' file 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50836717

复制
相关文章

相似问题

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