Grep 所有不以数字开头的字符串

Grep 所有不以数字开头的字符串

我正在寻找 grep 来显示所有不以数字开头的字符。我做过这样的事情:

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

但它不起作用。您对一些 reg exp 有什么想法吗?

答案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"

...以上应该做得相当好。您需要为您认为相关的分隔符定制\newline翻译。y///而且,sed根据实现的不同,您可能还需要一个实际的值<tab>来代替\t反斜杠转义符。

相关内容