9838
、など、4文字以外の数字をすべて削除する必要があります6738
。1337
1889
私はこのコマンドがうまくいくと思います:
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