我有一些随机输入的数字,例如:
0x3000 0x80004000 # There are Many Random Strings Here# 0x7000
0x8600 x1260 x1800 x45003045 # Random Strings #
因此x
后会有一个4位或8位数字。
我只需要获取4位数或8位数
我希望输出像这样,每行一个:
0x3000
0x80004000
0x7000
0x8600
x1260
x1800
x45003045
答案 0 :(得分:0)
将文件通过sed替换为使用换行替换空格然后查找换行符(^)后跟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]*"
答案 1 :(得分: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
要确保x
之后只有4位或8位数字,您可以执行以下操作:
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}
答案 2 :(得分:0)
grep方法:
grep -oP '0?x([0-9]{4}){1,2}' test.txt
如果需要,
[0-9]
可以更改为[0-9a-f]
-i
选项以防止不区分大小写。e.g。
$ 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