17

私はほとんどすべてを試しました(私は推測します)が、何もうまくいきませんでした。(オペレーティングシステム: Ubuntu 12.04)

照合する式 (テキスト ファイルから削除):

a c 4
a k 23
o s 1

私が試したこと:

's/[[a-z][:space:][a-z][:space:][0-9]]\{1,\}//gi'
's/.\s.\s[0-9]+//g'
's/[:alpha:][:space:][:alpha:][:space:][:digit:]+'
4

3 に答える 3

23

これは一致するはずです:

sed 's/[a-z][ ]*[a-z][ ]*[0-9]*//gi'

あなたの最初の試みはいくつかの角括弧を見逃しており、最も外側のものは必要ありません:

sed 's/[a-z][[:space:]][a-z][[:space:]][0-9]\{1,\}//gi' input

をエスケープする必要があるため、2番目の例は失敗しますが+、それでもgnu sedでのみ機能します。

sed 's/.\s.\s[0-9]\+//g' input

また、最後のものといくつかの同様の問題:

sed 's/[[:alpha:]][[:space:]][[:alpha:]][[:space:]][[:digit:]]\+//' input
于 2013-03-19T20:21:30.983 に答える
2

真ん中が近い!私を超えた理由で、プラス記号をエスケープする必要があります。また、ドット " ." を " "に置き換えて、[a-z]文字のみに一致するようにしました。

sed 's/[a-z]\s[a-z]\s[0-9]\+//g'

古いバージョンのボーナス ポータブル バージョンsed(こんにちは、Mac ユーザー!)。一部のsed実装は " +" にうるさいです:

sed 's/[a-z]\s[a-z]\s[0-9][0-9]*//g'
于 2013-03-19T20:23:19.750 に答える
1

[...]文字クラスを定義します。からまで[a-z]の任意の文字に一致します。連続する文字を一致させるには、それぞれにクラスを使用する必要があります: .az[a-z][[:space:]][a-z]

+特別な意味を持たせるには、バックスラッシュを付ける必要があります: [0-9]\+.

名前付き文字クラスは、文字クラス内でのみ機能します[[:alpha:]][[:space:]]

于 2013-03-19T20:23:38.827 に答える