A sed solution
linux-t77m:$ more st.txt
23920 E S:1 R:2 C:14 L:5 ch 80 7279 1113 5272 -342 1168 5642 -347 1265 5587
23921 E S:1 R:2 C:14 L:6 ch 1 4605 1267 4586 11 1331 4587 -31 1306 4692
linux-t77m:$ sed -r "s/E S:.* ch [0-9]+ //g" st.txt
23920 7279 1113 5272 -342 1168 5642 -347 1265 5587
23921 4605 1267 4586 11 1331 4587 -31 1306 4692
这是通过正则表达式替换完成的。命令s/< regexp>/<替换>/g会替换匹配< regexp>的所有行的每个部分,替代<替换>。
在这种情况下<的regexp>是E S:.* ch [0-9]+
这意味着:
- 搜索ES:
- 然后SEACH的一切,直到看到
- 的空间前述CH后跟一个空格,一个或多个数字和另一个空格
和<替换>是空字符串,因此它有效地删除了匹配行的部分它。
-r开关信号sed我们使用的是'扩展'的正则表达式,通常它们更清晰,因为它们不需要标准sed regexps所需要的那么多反斜杠。
它总是相同的7个字段,你需要删除? – 2010-06-22 20:13:06
@Jed:好点,如果答案是肯定的,'awk'可能是更好的(或至少更优化的)工具。 – 2010-06-22 20:15:53