7

我用grep它输出这样的列表

/player/ABc12
/player/ABC321
/player/EGF987
/player/egf751

但是我只想给出玩家的名字,比如ABC321EFG987等等......

4

4 回答 4

17

开始使用grep

$ grep -oP "/player/\K.*" FILE
ABc12
ABC321
EGF987
egf751

或更短:

$ grep -oP "[^/]/\K.*" FILE
ABc12
ABC321
EGF987
egf751

或没有-P(pcre) 选项:

$ grep -o '[^/]\+$' FILE
ABc12
ABC321
EGF987
egf751

或纯bash

$ IFS=/ oIFS=$IFS
$ while read a b c; do echo $c; done < FILE
ABc12
ABC321
EGF987
egf751
$ IFS=$oIFS
于 2012-10-02T00:09:18.153 回答
9

@sputnick 有正确的想法grep,类似的东西实际上是我的首选解决方案。我个人立即想到了一个积极的回顾:

grep -oP '(?<=/player/)\w+' file

\K效果也很好。

另一种(稍微短一些)解决方案是sed

sed 's:.*/::' file
于 2012-10-02T00:31:30.937 回答
4

停止使用 grep。

$ awk -F/ '$2 == "player" { print $3 }' input.txt
ABc12
ABC321
EGF987
egf751
于 2012-10-02T00:05:43.300 回答
0

一种使用方式GNU grep和积极的回顾:

grep -oP '(?<=^/player/).*' file.txt

结果:

ABc12
ABC321
EGF987
egf751
于 2012-10-02T00:30:06.140 回答