经过几个小时的失望搜索,我无法解决这个问题。
我正在输入grep
输入,我想要的是第一次出现任何数字。
示例:
nmcli --version
nmcli tool, version 1.1.93
用正则表达式管道grep
nmcli --version |grep -o '[[:digit:]]'
输出:
1
1
9
3
我想要的是什么:
1
是的,有一种方法可以用另一根烟斗做到这一点,但是那里是纯净的"单一的正则表达式呢?
答案 0 :(得分:3)
答案 1 :(得分:1)
虽然您想避免使用其他流程,但在现有命令中添加head
似乎最简单...
grep -o [[:digit:]] | head -n1
答案 2 :(得分:0)
from mechanize import Browser
br = Browser()
br.set_handle_robots( False )
br.addheaders = [('User-agent', 'Firefox')]
br.open( "http://warframe.market" )
br.select_form(nr=0)
br.form[ 'search-item' ] = 'Primed Chamber'
br.submit()
resp = resp.get_data()
print content
答案 3 :(得分:0)
这可以看作是一个流编辑任务:将一行减少到第一个数字。基于正则表达式寄存器的基本参考可以完成任务:
$ echo "junk 1.2.3.4" | sed -e 's/.* \([0-9]\).*/\1/'
1
传统上,Grep最适合搜索与模式匹配的文件和行。这就是为什么grep解决方案需要使用Perl正则表达式; Perl正则表达式具有以下功能:与-o
结合使用,允许grep“开箱即用”并以不是真正意图的方式使用:匹配X,然后输出X的子字符串。解决方案是简洁的,但不能移植到没有PCRE的grep实现。
顺便说一下,使用[0-9]
匹配ASCII数字。 [[:digit:]]
的目的是引入特定于语言环境的行为:能够匹配除ASCII 0x30到0x39之外的数字。
可以相当安全地说nmcli
不会使用,例如,Devangari数字,如1.2.3.4。{/ 1}。
答案 4 :(得分:-2)
您可以使用标准awk
代替:
nmcli --version | awk 'match($0, /[[:digit:]]/) {print substr($0, RSTART, RLENGTH); exit}'
例如:
$ seq 11111 33333 | awk 'match($0, /[[:digit:]]/) {print substr($0, RSTART, RLENGTH); exit}'
1