0

このプレーヤーのリストがあり、プレーヤーのフルネームの後に9文字以下が続くようにしたいのですがgrep、Linuxでコマンドを使用しています。

次のことを試しましたが、期待どおりに機能しませんでした。
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
4

4 に答える 4

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
于 2012-11-20T22:58:58.927 に答える
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)

追加のフォーマットが必要な場合は、grepの代わりにsedを使用することをお勧めします。

于 2012-11-21T09:08:40.497 に答える
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)
于 2012-11-21T08:31:48.637 に答える
0

「9文字以下でファウリング」とはどういう意味かわかりませんが、9文字以内のフルネームが必要だとすると、' .{0,9}_('.

于 2012-11-20T22:51:46.417 に答える