我想知道如何 grep 所有以数字开头的单词。到目前为止,我已经做到了:
egrep "^[[:digit:]]" tst
但它只打印出一行以数字开头的行。
预先感谢您的帮助。
答案1
如果你grep
支持 Perl Compatible RegExp ( -P
),你可以这样做:
grep -Po '(?<=^|\s)\d[^\s]*(?=\s|$)' file.txt
假设
word
你的意思是仅用空格分隔的字符?<=^|\s)
是零宽度正向查找模式,确保我们想要的单词前面是行首或空格\d[^\s]*
是我们想要的匹配,以数字开头的单词(?=\s|$)
是零宽度正前瞻模式,确保我们所需的匹配后面跟着空格或行尾。
答案2
如果你想打印以数字开头的单词列表,每行一个,你可以这样做:
tr -cs '[:digit:][:alpha:]' '\n' | grep '^[:digit:]'
该tr
命令列出所有字母数字字符串,每行一个。那么 grep 只需要查看行首的数字。
答案3
我建议
echo "foo bar 11baz q3ux
one, 2two? three!" | grep -o '\<[[:digit:]][^[:blank:]]*\>'
11baz
2two
这分别使用\<
和\>
作为词开始和词结束标记。