我有这样的文件:
other lines . . .
blah blah blah (:34)
我希望找到上述文件中数字的出现情况。我想到了:
grep [0-9] filename
但这是打印全部:
blah blah blah (:34)
我只想要34
。有什么办法吗?
答案1
您可以使用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)
现在要从文本中单独获取数字,你可以使用
>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324
将被输出。
这里“-o”用于仅输出行的匹配部分,而不是该行的全部内容。
花括号(例如 { 和 })表示匹配的实例数。{1,4} 要求前一个字符或字符类必须出现至少一次,但不能超过四次。
希望这可以帮助
答案2
[:digit:]
您可以使用9.3.5 节指定的RE 括号表达式POSIX 标准,与-o
标志结合仅打印匹配的“单词”
$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'
123
答案3
您也可以使用 Perl 风格的正则表达式
grep -Po "\\d+" filename
-P将 PATTERNS 解释为 Perl 兼容正则表达式 (PCRE)。
-o仅打印匹配行中匹配的(非空)部分,每个部分位于单独的输出行上。
答案4
我将使用 curl 在本地或远程访问您的文件,然后我将使用 grep 来查找用 (:) 括起来的数字的行,然后剪切这些部分并写入文件
接受的答案忽略了文件前几行中可能存在的数字,它对于示例数据确实有效,但如果文件是远程的呢?
当地的
curl file:///home/$USER/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
在此示例中output.txt
,您的当前文件夹将被覆盖,我们input.txt
从您的公共文件夹访问。
偏僻的
curl https://yoursite.com/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
在此示例中output.txt
,您的当前文件夹将被覆盖,我们input.txt
从中访问https://yoursite.com/Public/
。