我有这个文件:
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>
有人可以帮助我吗?
答案 0 :(得分:0)
这并不是那么简单,因为你想在某些地方替换多个空格(比如日期和IP之间),还要在其他地方(“csotelo”和“tty1”之间)替换单个空格。所以一个简单的模式是不够的,你需要能够分辨出这些案例的东西。使用awk的例子可能是:
awk '{print $1 " " $2 " " $3 " " $4 " " $5 "," $6 ...}'
其中...
应该继续输出以空格或逗号分隔的字段,以便在每个特定情况下执行您要执行的操作,直到最后一个字段为止。这样做是在空白上拆分行,然后在另一个之后输出一个元素,用空格或逗号分隔。
答案 1 :(得分:0)
你走了:
sed -e 's/\s\{2,\}/,/g' input.txt > output.txt
你的正则表达式使用+
,意思是“一个或多个”,但你不想替换单个空格。
{2,}
表示“介于两个和无限之间”或“两个或更多”。{2}
表示“正好两个”。{2,5}
表示“介于两个和五个之间”。{,5}
表示“介于零和五之间”或“多达五个”。