番号で始まらないすべての文字列をGrep


10

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

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

しかし、それは機能しません。正規表現について何か考えはありますか?


1
使用-vして-o原因grepは何も出力を生成しません。
cuonglm 2015

すべてのキャラクターを表示するとはどういう意味ですか?あなたは数字で始まらない行を意味しますか、それとも入力からすべての数字を取り除きたいですか?
Matteo

デフォルトでgrepは、基本的な正規表現を使用します。これは、あなた?が文字通り疑問符として扱われていることを意味します。疑問符をエスケープするか、正規表現\?-Eオプションを使用します。extendedこの場合?はパターン文字です。
Peter.O 2015

回答:


22

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

@mikeservなんで?元の質問で多分尋ねられたように、数字で始まるすべての単語を削除します
Matteo

1
いいえ、機能します。OS X(およびおそらく他のBSD)で終了\>および\ <が機能していません。このため、両方のバージョンについて説明しました。そして、例として私のマシンで醜いものを使わなければなりませんでした。
Matteo

manページから\> Matches the null string at the end of a word. This is equivalent to [[:>:]] '。 `
Matteo

3

文字列をどのように定義するかによって異なります(句読文字を文字列に数えるかどうかなど)。それにもかかわらず、あなたは次のようなものから始めるかもしれません

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

2

番号で始まる行からすべての単語を削除するには、次のようにし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"

...上記はかなりうまくいくはずです。関連性があると思われる\nディバイダーのewline y///変換を調整する必要があります。また、sed実装によって<tab>は、\tバックスラッシュエスケープの代わりに実際のものを使用することもできます。


@don_crissti-ああ、ええ-私はそれをスワップの!前に置きます'"'が、あなたが使用しbashているのでset +Hあればzsh、あなたが望むかもしれませんし、そうであればset -K。私の意見では、引用された!拡張は狂気です。ヒアドキュメントを使用して"${0#-}" <<\CMD\nyour cmd strings\nCMD\n、インタラクティブなシェルでスクリプト化された動作を取得することもできます。
mikeserv 2015

"${0#-}" <<...先端をありがとう!
don_crissti 2015

@don_crissti-使用する"${0#-}" -s -- arg list <<\CMD\n...場合は、呼び出し時に定位置パラメーターを設定することもできます。"$@"またはの*代わりにを使用すると便利ですarg list。そして、ln -s "$(command -v "${0#-}")" /tmp/new_name; cd tmp; new_name <<\CMD\n...あなたは新しいもの$0を手に入れることができ、まだ標準入力を処理することができます。
mikeserv 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.