質問から、ファイルにはあらゆる種類の文字が含まれているように見え、ファイル内のすべての数字の最初の数字を分離したいと考えています。また、数字は行の最初の単語である必要はないようです (前にスペースがない場合など)。これら 2 つの前提を念頭に置いて、次のことを行うことができます。
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'
検索するようになり、sed コマンドの出力が次のようになることを意味します。\b
{"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=\"\">
したがって、カットの必要はありません。
入力ファイルに関する詳細情報があれば、コマンドをさらに最適化できます。