我正在尝试浏览一个文件并查找大于16000的所有数字并将其替换为数字16000.我一直在使用sed并且我创建了一个正则表达式
sed 's/[1]\{1\}[6-9]\{1\}[0-9]\{3\}/16000/g'
这个问题是它匹配文件中的东西,如A17890qr。考虑到我的表达中没有字母,我不明白为什么我匹配这个。
示例输入
A17890qr,1000,17000,18000,1500,140,19900
示例输出
A17890qr,1000,16000,16000,1500,140,16000
编辑:我已将正则表达式更改为
sed 's/[^a-z A-Z][1]\{1\}[6-9]\{1\}[0-9]\{3\}/16000/g'
但是现在从示例输入中我得到了
的输出A17890qr,10001600016000,1500,14016000
答案 0 :(得分:2)
在perl
perl -pe 's/\b\d+\b/$&>16000?16000:$&/ge' file
对于边界检查的每个数字,如果它超过16000并且如果是则替换。
答案 1 :(得分:1)
使用awk:
awk 'BEGIN{FS=OFS=","} {for (i=1; i<=NF; ++i){ if ($i ~ /^[0-9]+$/ && $i > 16000) {$i=16000}}}1' file
输出:
A17890qr,1000,16000,16000,1500,140,16000
答案 2 :(得分:0)
sed 's/[^a-zA-Z][1]\{1\}[6-9]\{1\}[0-9]\{3\}/,16000/g'
这解决了这个确切的问题,但是当你尝试
时却没有19000,A17890qr,1000,17000,18000,1500,140,19900
输出
19000,A17890qr,1000,16000,16000,1500,140,16000