2012-11-20 42 views
0

我有這個球員列表,我想獲得玩家全名,後面跟着9個或更少的字符,我在Linux中使用grep命令。需要幫助使用grep從列表中提取名字

我嘗試以下,但它沒有工作,我所期望的方式:
cat players.txt | grep -E ' .[0-9]_\('

下面是數據的樣本,我跟(該players.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

cat players.txt | grep -E'[0-9] _ \(' 這個列表要大,所以我只是舉個例子 –

+0

這個命令會顯示文本和grep空間匹配的任何字符9或者更少 –

+1

很難說出什麼是問這裏。請包括一些預期的輸出。 – Steve

回答

0

我不確定你的意思是「9個字符或更少」,但假設你想要一個不超過9個字符的全名,它是' .{0,9}_('

+0

我相信他的意思是「後跟9個字符或更少」。所以全名+9或更少的字符。 – Aust

+0

是的,謝謝你的工作,但你得到\'。{0,9} _ \('非常感謝 –

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 
+0

感謝他們回答了我。'。{0,9} _ \(' –

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) 
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。