如何在第二个管道后grep列


1

例:

3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|

grep后的预期视图:

test@test.com

Answers:



4

也许awk更适合这种用法:

awk 'BEGIN { FS = "|" } ; { print $3 }'

如果你必须从这样的输入中提取多个字段,我认为使用awk是最简单的。

(OFF:原谅我,如果我在指出AWK-病房方向)


也许?你为什么这么认为?

1
可以使用cut以下方法提取多个字段:cut -d'|' -f3-5

2
根据我之前的经验,我认为海报或其他人发现此页面将面临输入需要多列的问题。但是,如果较轻工具的受限特征集足够,则较不复杂的工具(切割)可能比通用工具(awk)更快。(我没有数据支持这个)另外,对我来说,awk命令更具可读性。如果我不得不重新阅读所写的剧本,我希望看到awk系列支持其他人 - 但这只是个人观点,而不是客观事实。这就是为什么只有'也许'。

2
+1抱歉,我没有完成剪切作业,谢谢你指出了!

3

为什么grep?使用cut

echo "3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|" | cut -d '|' -f 3

1

想象一下,您的内容存在于此文件下 file1

[max @ localhost~] $ cat file1 3 | 100 | test@test.com | 0 | 0 | 6:1,10,11,12,13,2,3,4,5,6,9 | 7:1 ,10,11,13,16,2,4,5,6,9 |

要剪切third字段,请使用此命令

[max @ localhost~] $ cut -d“|” -f3 file1

test@test.com

这里

-d:指定使用字符| 作为分隔符

-f1:打印第一个字段,如果要打印第二个字段使用-f2,第三个字段使用-f3,等等......

假设file1内容是这样的

[max @ localhost~] $ cat file1

根:X:0:0:根:/根:/斌/庆典

然后我们必须:像这样使用分隔符

切割first场使用f1

[max @ localhost~] $ cut -d“:” -  f1 file1
根

削减second野外使用f2

[max @ localhost~] $ cut -d“:” -  f2 file1
X

削减third野外使用f3

[max @ localhost~] $ cut -d“:” -  f3 file1
0

1

只是为了好玩,这里是你如何能有做到这一点greptr

<infile grep -Eo '^([^|]+\|){3}' | grep -Eo '[^|]+\|$' | tr -d '|'

第一个正则表达式抓住前三个管道分隔的字段。第二个grep选出最后一个字段,tr删除剩余的分隔符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.