Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在这种情况下,如何替换文本文件中的制表符空间_Linux_Shell_Text_Replace_Space - Fatal编程技术网

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 ...}'