4文字以外の数字をすべて削除してください。

4文字以外の数字をすべて削除してください。

9838、など、4文字以外の数字をすべて削除する必要があります673813371889

私はこのコマンドがうまくいくと思います:

sed 's/....[^0-9]//g'

.正規表現のすべての文字を表し、[^0-9]数値を削除しません。

入力例は次のとおりです。

9228 Hello 8473 World War 1 1914-1918 Hello 8391 World War 2 1939-1945

する:

9228 8473 1914 1918 8391 1939 1945

ベストアンサー1

次のコマンドで答えることができますgrep

入力ファイル:

9228 Hello 8473 World War 1 1914-1918 Hello 8391 World War 2 1939-1945

注文する:

grep -Eo '\<[0-9]{4}\>' file |tr '\n' ' '

長さ4のランダムな数値を返します。

-E-o一致する部分だけを印刷するには、拡張正規表現に切り替えます。

出力:

9228 8473 1914 1918 8391 1939 1945

更新された回答:

入力ファイル:

9228 Hello 8473 World War 1 1914-1918 Hello 8391 World War 2 1939-1945

foo1234bar
a1111
12345
0x2222ff
1.3333
2.54321

注文する

grep -oP '(?<![0-9])[0-9]{4}(?![0-9])' file | tr '\n' ' '

否定的な Lookbehind/lookforward を使用した grep:

(?<![0-9])[0-9]{4}(逆方向否定検索):数字を長さ= 4に一致させ、先行番号がありません[0-9]
[0-9]{4}(?![0-9])(否定的な予測):数字を長さ= 4に一致させ、後に数字がありません。

出力:

9228 8473 1914 1918 8391 1939 1945 1234 1111 2222 3333

おすすめ記事