如何在第二个管道后 grep 列

如何在第二个管道后 grep 列

例子:

3|100|[email protected]|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 之后的预期视图:

[email protected]

答案1

使用cut

$ echo '3|100|[email protected]|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'|' -f3
[email protected]

答案2

为什么使用 grep?使用cut

echo "3|100|[email protected]|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

答案3

或许awk更适合这种用法:

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

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

(OFF:请原谅我指出了尴尬的方向)

答案4

grep只是为了好玩,你可以用以下方法来实现tr

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

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

相关内容