在这种情况下,如何替换文本文件中的制表位



我有这个文件:

Tue Nov 11 10:32:10 2014        172.18.0.240    csotelo tty1    172.18.1.131    stop    task_id=88      timezone=UTC    service=shell   priv-lvl=15     cmd=configure terminal <cr>

我用了这个命令:

sed -e 's/s+/,/g' input.txt > output.txt

output.txt的结果:

Tue,Nov,11,10:32:10,2014,172.18.0.240,csotelo,tty1,172.18.1.131,stop,task_id=88,timezone=UTC,service=shell,priv-lvl=15,cmd=configure,terminal,<cr>

期望输出:

Tue Nov 11 10:32:10 2014,172.18.0.240,csotelo,tty1,172.18.1.131,stop,task_id=88,timezone=UTC,service=shell,priv-lvl=15,cmd=configure terminal <cr>

有人能帮我吗?

这并不是那么简单,因为你想在某些地方替换多个空格(比如日期和IP之间),但也要在其他地方替换一个空格("csotelo"one_answers"tty1"之间)。因此,一个简单的模式是不够的,你需要一些能够区分这些情况的东西。使用awk的一个例子可能是:

awk '{print $1 " " $2 " " $3 " " $4 " " $5 "," $6 ...}'

其中...应继续输出由空格或逗号分隔的字段,具体取决于您在每个特定情况下要做什么,直到最后一个字段。这样做的目的是在空白处分割行,然后输出一个元素接一个元素,用空格或逗号分隔。

开始:

sed -e 's/s{2,}/,/g' input.txt > output.txt

正则表达式使用+,意思是"一个或多个",但您不想替换单个空格。

  • {2,}的意思是"介于二和无穷大之间"或"两个或更多"
  • {2}的意思是"恰好两个"
  • {2,5}的意思是"介于二和五之间"
  • {,5}的意思是"在零到五之间"或"多达五个"

最新更新