我正在寻找 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"
...以上应该做得相当好。您需要为您认为相关的分隔符定制\n
ewline翻译。y///
而且,sed
根据实现的不同,您可能还需要一个实际的值<tab>
来代替\t
反斜杠转义符。