我使用了grep
来输出像这样的列表
/player/ABc12
/player/ABC321
/player/EGF987
/player/egf751
但是我想只给出ABC321
,EFG987
等玩家的名字......
答案 0 :(得分:12)
开始使用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
答案 1 :(得分:5)
@sputnick对grep
有正确的想法,这样的东西实际上是我的首选解决方案。我个人立刻想到了一个积极的看法:
grep -oP '(?<=/player/)\w+' file
但\K
的效果也非常好。
替代(稍短)解决方案是使用sed
:
sed 's:.*/::' file
答案 2 :(得分:3)
停止使用grep。
$ awk -F/ '$2 == "player" { print $3 }' input.txt
ABc12
ABC321
EGF987
egf751
答案 3 :(得分:0)
使用GNU grep
和积极看守的一种方式:
grep -oP '(?<=^/player/).*' file.txt
结果:
ABc12
ABC321
EGF987
egf751