我有这个玩家列表,我希望得到玩家全名,后跟9个或更少的字符,我在Linux中使用grep
命令。
我尝试了以下方法,但它没有按照我预期的方式工作:
cat players.txt | grep -E ' .[0-9]_\('
以下是我正在使用的数据示例(部分player.txt文件)
* Ron_Springett_(1959-1966),_33_Caps
* Alex_Stepney_(1968),_1_Cap
* Nobby_Stiles_(1965-1970),_28_Caps
* Mike_Summerbee_(1968-1973),_8_Caps
* Peter_Swan_(1960-1962),_19_Caps
* Bobby_Tambling_(1962-1966),_3_Caps
* Derek_Temple_(1965),_1_Cap
* Peter_Thompson_(1964-1970),_16_Caps
* Robert_Thomson_(1963-1964),_8_Caps
* Terry_Venables_(1964),_2_Caps
* Dennis_Viollet_(1960-1961),_2_Caps
* Anthony_Waiters_(1964),_5_Caps
* Gordon_West_(1968-1969),_3_Caps
* Frank_Wignall_(1964),_2_Caps
* Ray_Wilson_(1960-1968),_63_Caps
* Tommy_Wright_(1968-1970),_11_Caps
* Gerald_Young_(1964),_1_Cap
答案 0 :(得分:1)
你的问题有些模糊,但这看起来或多或少与你想要做的一样。
cat players.txt | perl -ne '
s/_/ /g;
/([A-Za-z]+ [A-Za-z]+).*?([0-9-]+)/ && print "$1 \t $2\n"
'
Ron Springett 1959-1966
Alex Stepney 1968
Nobby Stiles 1965-1970
Mike Summerbee 1968-1973
Peter Swan 1960-1962
Bobby Tambling 1962-1966
Derek Temple 1965
Peter Thompson 1964-1970
Robert Thomson 1963-1964
Terry Venables 1964
Dennis Viollet 1960-1961
Anthony Waiters 1964
Gordon West 1968-1969
Frank Wignall 1964
Ray Wilson 1960-1968
Tommy Wright 1968-1970
Gerald Young 1964
答案 1 :(得分:0)
我不确定你的意思是“9个字符或更少字符”,但假设你想要一个不超过9个字符的全名,那就是' .{0,9}_('
。
答案 2 :(得分:0)
不确定你究竟是什么意思,但如果你想要提取玩家名称和年/年范围,你可以用grep这样做:
<players.txt grep -Eo '[^ *][^)]+\)' | tr '_' ' '
tr将下划线转换为空格,输出:
Ron Springett (1959-1966)
Alex Stepney (1968)
Nobby Stiles (1965-1970)
Mike Summerbee (1968-1973)
Peter Swan (1960-1962)
Bobby Tambling (1962-1966)
Derek Temple (1965)
Peter Thompson (1964-1970)
Robert Thomson (1963-1964)
Terry Venables (1964)
Dennis Viollet (1960-1961)
Anthony Waiters (1964)
Gordon West (1968-1969)
Frank Wignall (1964)
Ray Wilson (1960-1968)
Tommy Wright (1968-1970)
Gerald Young (1964)
答案 3 :(得分:0)
这可以按照您的问题运作;
grep -Eo '[A-Za-z_]+\([0-9-]{0,9}\)' players.txt
Ron_Springett_(1959-1966)
Alex_Stepney_(1968)
Nobby_Stiles_(1965-1970)
Mike_Summerbee_(1968-1973)
Peter_Swan_(1960-1962)
Bobby_Tambling_(1962-1966)
Derek_Temple_(1965)
Peter_Thompson_(1964-1970)
Robert_Thomson_(1963-1964)
Terry_Venables_(1964)
Dennis_Viollet_(1960-1961)
Anthony_Waiters_(1964)
Gordon_West_(1968-1969)
Frank_Wignall_(1964)
Ray_Wilson_(1960-1968)
Tommy_Wright_(1968-1970)
Gerald_Young_(1964)
如果您需要其他格式,我建议使用sed而不是grep。