我想匹配一个字符串,基本上是一个正则表达式格式,其中我想匹配上面 0-255 和 257 之间的数字。这意味着除了 256 之外的每个数字。
有人可以帮助解决相同的正则表达式格式吗?
答案1
据我了解这个问题,这些数字都是整数。这个想法是匹配并显示包含除 256 以外的数字的条目,前面或前面不带前导零。
您的数字是否应该在一行上:
grep "^[0-9][0-9]*$" | grep -v "^0*256$"
(grep -v
排除匹配的行而不是包含它们)
输出:
$ echo "12" | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
12
$ echo "2567" | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
2567
$ echo "256" | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
$ echo "0256" | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
$ echo "something" | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
如果您使用另一个分隔符:
例如,您可以使用预处理输入sed
来使它们与grep
上面的命令兼容。这里有一个逗号分隔的输入,其中每个逗号都被换行符 ( \n
) 替换:
sed -r 's/,/\n/g'
输出:
$ echo "2567,255,256,12,something,05,0256" | sed -r 's/,/\n/g' | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
2567
255
12
05
最后,您的数字是否应该与其他随机字符混合:
在这种情况下,额外的步骤允许删除所有非数字字符:
sed -r 's/[^0-9]//g'
输出:
$ echo "2567,255,256,mama256a,papa1812b,something,05,0256" | sed -r 's/,/\n/g' | sed -r 's/[^0-9]//g' | grep "^[0-9][0-9]*$" | grep -v "^0*256$"
2567
255
1812
05