如何使用 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
代替。
如何在 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
代替。