Ant*_*t's 81 command-line bash grep text-processing
我有这样的文件:
other lines . . .
blah blah blah (:34)
Run Code Online (Sandbox Code Playgroud)
我想在上面的文件中找到数字的出现。我想出了:
grep [0-9] filename
Run Code Online (Sandbox Code Playgroud)
但这正在打印整个:
blah blah blah (:34)
Run Code Online (Sandbox Code Playgroud)
而是我只想要34. 有什么办法吗?
dev*_*av2 115
您可以使用grep -E访问扩展的正则表达式语法(与egrep相同)
我创建了一个包含以下内容的测试文件:
>cat testfile
this is some text
with some random lines
again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)
Run Code Online (Sandbox Code Playgroud)
现在从您可以使用的文本中单独grep数字
>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324
Run Code Online (Sandbox Code Playgroud)
将被输出。
这里的“-o”用于只输出该行的匹配段,而不是该行的全部内容。
花括号(例如 { 和 })表示匹配的实例数。{1,4} 要求前一个字符或字符类必须至少出现一次,但不超过四次。
希望这可以帮助
Ser*_*nyy 17
您可以使用POSIX 标准[:digit:]第 9.3.5 节指定的RE 括号表达式,结合flag 仅打印匹配的“单词”-o
$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'
123
Run Code Online (Sandbox Code Playgroud)
你也可以使用 Perl 风格的正则表达式
grep -Po "\\d+" filename
Run Code Online (Sandbox Code Playgroud)
-P 将PATTERNS 解释为 Perl 兼容的正则表达式 (PCRE)。
-o只打印匹配行的匹配(非空)部分,每个这样的部分在一个单独的输出行上。