从问题看来,文件包含各种字符,您想隔离文件中所有数字的前几位。看起来数字不必是一行的第一个单词(如在它之前没有任何空格)。牢记这两个假设,您可以执行以下操作:
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 转换,则不需要剪切命令。也就是说,如果
\([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=\"\">
因此,不需要切割。
根据输入文件的更多信息,可以进一步优化命令。