我有这个文件:
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}
的意思是"在零到五之间"或"多达五个"