私は数字で始まらないすべての文字を表示するために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翻訳をカスタマイズする必要があります\n
。y///
また、sed
実装によっては、バックスラッシュエスケープ文字の代わり<tab>
に実際の値が必要になる場合があります。\t