据我所知,我是Linux Shell脚本的新手,在文件中查找数字可以用grep来完成
egrep -o "[0-9][0-9]*" my_file但是我如何获得这些字符串的第一位数并将其作为统计数据呢?例如1234,123,1267,所以我每3次得到1次
我知道使用
A=$(tr -cd 1 < page.html|wc -c)我可以在一个文件中获得数字"1“计数,但这不是我想要的....我要数第一个数字"1"......这就是为什么这对我来说很难。
请帮帮忙......非常感谢。
发布于 2013-06-07 12:24:22
A=$(egrep -o '[0-9]+' my_file | egrep -c '^1')第一个egrep查找所有数字并输出它们。第二个egrep使用-c选项输出匹配计数,并且regexp匹配以1开头的行。
发布于 2013-06-07 14:07:34
从问题看,文件似乎包含所有类型的字符,并且您希望隔离文件中所有数字的第一个数字。它看起来也不需要是一行的第一个单词(例如在前面没有任何空格)。牢记这两个假设,您可以执行以下操作:
grep '[0-9]' test.html| sed 's/\([0-9]\+\)/\n\1\n/g' |grep '^[0-9]' |cut -c1 |sort |uniq -c举个例子:
curl -N -s 'http://stackoverflow.com/users/1353267/samveen' |grep '[0-9]' |sed 's/\([0-9]\+\)/\n\1\n/g' |cut -c1 |grep '^[0-9]' |sort |uniq -c重要:在上面的示例页面中,有一行{"fkey":"8f1a9c6e21503516793b853265ec4939","isRegistered":true,"userId":1353267,"accountId":1430801,"gravatar":"<div class=\"\">,划分如下:
{"fkey":"
8
f
1
a
9
c
6
e
21503516793
b
853265
ec
4939
","isRegistered":true,"userId":
1353267
,"accountId":
1430801
,"gravatar":"<div class=\"\">如果您不想要此行为,sed模式将更改为
sed 's/\b\([0-9]\+\)\b/\n\1\n/g',这意味着它现在搜索独立的数字(\b是单词边框),并且sed命令的输出现在是:
{"fkey":"8f1a9c6e21503516793b853265ec4939","isRegistered":true,"userId":
1353267
,"accountId":
1430801
,"gravatar":"<div class=\"\">此外,如果巧妙地选择了sed转换,则不需要cut命令。也就是说,如果
将模式的\([0-9]\+\)部分更改为\([0-9]\)[0-9]*,那么sed将只显示每个数字的第一个数字,而不是整个数字。因此,不再需要cut -c1。使用
sed 's/\b\([0-9]\)[0-9]*\b/\n\1\n/g',我们得到:
{"fkey":"8f1a9c6e21503516793b853265ec4939","isRegistered":true,"userId":
1
,"accountId":
1
,"gravatar":"<div class=\"\">因此,不需要cut。
给出关于输入文件的更多信息,该命令可以进一步优化。
https://stackoverflow.com/questions/16976072
复制相似问题