我正在尝试使用sed删除文本文件的某些部分,例如:
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
我需要删除的部分是每行中的E S:1 R:2 C:14 L:5 ch 80
和E S:1 R:2 C:14 L:6 ch 1
等部分。整个文件中的数字会发生变化,但总是在1到100之间。
答案 0 :(得分:2)
如果它始终是相同的字段,您也可以使用cut
:
jed@jed-osx:~$ echo "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" | cut -d" " -f1,8-
23920 80 7279 1113 5272 -342 1168 5642 -347 1265 5587
23921 1 4605 1267 4586 11 1331 4587 -31 1306 4692
编辑:使用的剪切命令的说明:
-d" "
使用空格作为分隔符
-f 1,8-
返回字段1,字段8和8之后的所有字段
答案 1 :(得分:1)
sed解决方案
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> /< substitution> / g替换匹配< regexp>的每一行的每个部分。 for< substitution>。
在这种情况下< regexp>是E S:.* ch [0-9]+
,意思是:
< substitution>是空字符串,因此它有效地删除与其匹配的行的部分。
-r开关信号sed我们正在使用'扩展'正则表达式,这通常更清晰,因为它们不需要标准sed regexp所需的那么多反斜杠。