Linux 在这种情况下,如何替换文本文件中的制表符空间
我有这个档案:Linux 在这种情况下,如何替换文本文件中的制表符空间,linux,shell,text,replace,space,Linux,Shell,Text,Replace,Space,我有这个档案: 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> output.txt的结果: Tue,Nov,11,10:32:10,2014,172.18.0.240,cs
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>
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和tty1之间的其他地方替换一个空格。所以一个简单的模式是不够的,你需要一些东西来区分这些情况。使用awk的示例可能类似于:
awk '{print $1 " " $2 " " $3 " " $4 " " $5 "," $6 ...}'
在哪里。。。应继续输出由空格或逗号分隔的字段,并在每个特定情况下指定要执行的操作,直到最后一个字段。这样做的目的是在空白处分割行,然后依次输出一个元素,以空格或逗号分隔。给您:
sed-e's/\s\{2,\}/,/g'input.txt>output.txt
您的正则表达式使用+,这意味着一个或多个,但您不想替换单个空格
{2,}表示介于两个和无穷大之间或两个或多个之间。
{2} 正好是两个。
{2,5}表示2到5之间。
{,5}表示介于0和5之间或多达5。
你必须在正则表达式中更加具体!可以先用某个空间替换某个空间,然后替换多个空间,然后用一个空间替换某个空间。或者在执行s///制表符分隔的文件时,使用cmd=作为右边界更容易在代码中使用,并且像LibreOffice Calc和Excel这样的工具可以很好地理解制表符分隔的文件。@l0b0:虽然这是一个正确的陈述,但与OPs问题无关;系统日志文件中通常没有选项卡。
awk '{print $1 " " $2 " " $3 " " $4 " " $5 "," $6 ...}'