sed コマンドを使用して、テキストファイルから 10000 以下のエントリを検索します。

sed コマンドを使用して、テキストファイルから 10000 以下のエントリを検索します。

このコマンドを使用してファイル内の10000以下のすべての項目を検索しようとしていますが、この不完全な検索文字列は10000以上の項目に対して機能する可能性がありますsedsed

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より長い数字内で部分文字列が一致するのを防ぐことができます。

\|1000010000は、前の文字列の残りの部分に比べてわずかにユニークであるため、一致します。尾は印刷結果を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文字列の前後の境界線を表します。

おすすめ記事