-3

我有一些随机输入的数字,例如:

0x3000 0x80004000        # There are Many Random Strings Here#                        0x7000
0x8600 x1260       x1800 x45003045 # Random Strings #   

所以后面会有一个 4 位或 8 位的数字x。我只需要获取 4 Digits 或 8 Digits

我希望输出是这样的,每行一个:

0x3000
0x80004000
0x7000
0x8600
x1260
x1800
x45003045
4

3 回答 3

0

grep 方法:

grep -oP '0?x([0-9]{4}){1,2}' test.txt

如果需要,

  1. [0-9]可以改为[0-9a-f]
  2. -i可以添加选项以不区分大小写。

例如

 $ cat test.txt
 0x3000 0x80004000        # There are Many Random Strings Here#                            0x7000
 0x8600 x1260       x1800 x45003045 # Random Strings #   
 0x123456

 $ grep -oP '0?x([0-9]{4}){1,2}' test.txt
 0x3000
 0x80004000
 0x7000
 0x8600
 x1260
 x1800
 x45003045
 0x1234
于 2013-10-29T09:59:43.290 回答
0

通过 sed cat 文件以用换行符替换空格然后查找换行符 (^) 后跟 x 然后是数字或 (|) 换行符 (^) 后跟 0x 数字如果你不想要十六进制(虽然我怀疑你这样做我怀疑你这样做)然后摆脱 a-fA-F

cat yourfilehere | sed -e "s/[ \t]/\n/g" | grep -E "^x[0-9a-fA-F].*|^0x[0-9a-fA-F]*"
于 2013-10-29T05:59:47.320 回答
0

一个awk解决方案

awk '{for (i=1;i<=NF;i++) if ($i~/[0-9]*x[0-9]+/) print $i}' file
0x3000
0x80004000
0x7000
0x8600
x1260
x1800
x45003045

为了确保它只有 4 位或 8 位数字,x您可以执行以下操作:

awk --re-interval '{for (i=1;i<=NF;i++) if ($i~/[0-9]*x([0-9]{4}|[0-9]{8})$/) print $i}' file

Gnu awk 需要--re-interval启用区间表达式{4}

于 2013-10-29T07:38:47.977 回答