如何使用 sed 查找替换大于 100 的数字?

how to find the replace the digit which is greater than 100 using sed?

如何在 sed 中使用通配符?我想搜索并替换大于100的“第7列”,将其替换为“100”

输入:-

$猫/tmp/test.in

Mon Sep 14 12:48:04 IST 2015, 1
Mon Sep 14 12:50:04 IST 2015, 110

预期输出:

Mon Sep 14 12:48:04 IST 2015, 1
Mon Sep 14 12:50:04 IST 2015, 100

累了:-

$ sed -i 's/,\ 1.*/, 100/g' /tmp/test.in

Mon Sep 14 12:48:04 IST 2015, 100
Mon Sep 14 12:50:04 IST 2015, 100

但您可以看到第 7 列中的数字“1”何时被“100”替换。如何实现?

提前致谢

awk '>100{=100}7' file

sed 不太适合匹配calculation/comparison,改用awk。

[root@test /tmp]$ sed 's/,\ 1..*/, 100/g' a
Mon Sep 14 12:48:04 IST 2015, 1
Mon Sep 14 12:50:04 IST 2015, 100
sed -e '/,[[:blank:]]*[1-9]\{1,2\}$/b' -e '/,[[:blank:]]*100$/b' -e 's/,[^,]*$/, 100/' YourFile
  • 假设
    • 所有行都在范围内(如果需要,添加过滤器选择作为第一个操作很容易)
    • 最后一个数字后没有 space(如果需要添加模式很容易)
    • posix 合规

这可能适合您 (GNU sed):

sed -r 's/ \S\S\S+$/ 100/' file

由于最后一个字段只包含一个整数,任何3位或更多位的数字都可以用100代替。