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

时间:2015-09-14 07:40:42

标签: linux bash awk sed scripting

如何使用sed使用外卡?我想搜索并替换大于100的“第7列”,将其替换为“100”

输入: -

$ cat /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

但你可以看到数字“1”在第7列被“100”替换的时间。如何实现这个目标?

提前致谢

4 个答案:

答案 0 :(得分:3)

awk '$7>100{$7=100}7' file

sed不是很好做​​匹配计算/比较,而是使用awk。

答案 1 :(得分:1)

sed -e '/,[[:blank:]]*[1-9]\{1,2\}$/b' -e '/,[[:blank:]]*100$/b' -e 's/,[^,]*$/, 100/' YourFile
  • 假设
    • 所有行都在范围内(如果需要,添加过滤器选择作为第一个操作很容易)
    • 在最后一个号码后面没有空格(如果需要,添加模式很容易)
    • posix compliance

答案 2 :(得分:0)

[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

答案 3 :(得分:0)

这可能适合你(GNU sed):

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

由于最后一个字段只包含一个整数,因此任何带有3位或更多位数的数字都可以替换为100