数字で始まらないすべての文字列を Grep します。

数字で始まらないすべての文字列を Grep します。

私は数字で始まらないすべての文字を表示するためにgrepを探しています。私は次のことをしました。

grep -v '^[1-2]*[a-zA-Z]?' -o

しかし、うまくいきません。いくつかの正規体験のアイデアはありますか?

答え1

grep -v '^[0-9]'

数字で始まり、-v()と一致しないすべての行を出力します。^[0-9]

例えば

$ cat test
string
string123
123string
1string2
$ grep -v '^[0-9]' test
string
string123

または、数字で始まるすべての単語を削除したい場合

sed 's/[[:<:]][[:digit:]][[:alnum:]_]*[[:>:]]//g'

またはショートカットとアサーションを使用してください。

sed 's/\<\d\w*\>//g'

例えば

$ cat test
one
two2
3three
4four4
five six
seven 8eight
9nine ten
11eleven 12twelve
a b c d
$ sed 's/[[:<:]][[:digit:]][[:alnum:]_]*[[:>:]]//g' test
one
two2


five six
seven 
 ten

a b c d

答え2

どのように定義するかによって異なります。ひも(たとえば、文字列に句読点を含めるかどうか)が、次のように始めることもできます。

grep -Po '\b[^[:digit:]].*?\b' file

答え3

数字で始まる行からすべての単語を削除するにはsed

sed 'x;s/.*//;G
     s/[[:space:]][[:punct:]]\{0,1\}[0-9][^[:space:]]*//g
     s/\n//'

...または数字で始まらない単語のみが必要な場合は、各単語を別々の行に印刷してください。

sed 'y/!\t "'"'?/\n\n\n\n\n\n/;/^[_[:alpha:]]/P;D"

...上記の作業はかなりうまく行われます。関連性があると思われる区切り文字に対してewline翻訳をカスタマイズする必要があります\ny///また、sed実装によっては、バックスラッシュエスケープ文字の代わり<tab>に実際の値が必要になる場合があります。\t

関連情報