このコマンドを使用してファイル内の10000以下のすべての項目を検索しようとしていますが、この不完全な検索文字列は10000以上の項目に対して機能する可能性がありますsed
。sed
sed -n "/[0-9][0-9][0-9][0-9][0-9]/ q" logfile
ベストアンサー1
これを行うには、次の方法を使用することもできます。
$ sed -n "/^[0-9]\{0,4\}$\|10000/p" logfile
はい
次のサンプルファイルがあるとしますlogfile
。
$ seq 9900 10050 | sed 's/$/ /' > logfile
その結果、logfile
次のようなファイルが生成されます。
$ head -5 logfile
9900
9901
9902
9903
9904
$ tail -5 logfile
10046
10047
10048
10049
10050
sed 's/$/ /'
サンプルファイルを生成すると、上記の行のために各行の後にスペースがあります。
上記のコマンドを実行すると、次のようになりますsed
。
$ sed -n "/^[0-9]\{1,4\}[^0-9]\|10000/p" logfile | tail -5
9996
9997
9998
9999
10000
私たちはすべてを10000に設定しました。それがすべてです。
どのように動作しますか?
上記のsed
操作は、0から9の範囲の数字で始まり、1から4の範囲の長さを持つ行を見つけるように機能します。この部分を実行するsed
記号です"/^[0-9]\{1,4\}[^0-9]
。[^0-9]
最後の記号は0から9以外の文字を表します。これにより、sed
より長い数字内で部分文字列が一致するのを防ぐことができます。
\|10000
10000は、前の文字列の残りの部分に比べてわずかにユニークであるため、一致します。尾は印刷結果をp
伝えます。sed
代わりにgrepを使う
sed
実際には不適切な検索ツールを使用してください。代わりにそれを使用する方が良いかもしれませんgrep
。
$ grep "\b\([0-9]\{1,4\}\|10000\)\b" logfile | head -5
9900
9901
9902
9903
9904
$ grep "\b\([0-9]\{1,4\}\|10000\)\b" logfile | tail -5
9996
9997
9998
9999
10000
上記のコマンドは、10000 以下の数値文字列を含むすべての行を検索します。\b
文字列の前後の境界線を表します。