在Linux中用文本文件中的逗号replace空格

我需要编辑几个文本文件(从sar输出),并将其转换为CSV文件。

我需要使用sed或awk函数(在Linux中简单的shell脚本)来更改每个空白(也许它是输出中的数字之间的选项卡)。

谁能帮我? 我使用的每个命令根本没有改变文件; 我试过gsub

 tr ' ' ',' <input >output 

用逗号replace每个空格,如果需要的话,可以用-s标志(挤压重复)进行传递,它将SET1(空白空间)中列出的重复字符的每个input序列replace为字符。

在代替标签后使用squeeze重复:

 tr -s '\t' <input | tr '\t' ',' >output 

尝试像这样:

 sed 's/[:space:]+/,/g' orig.txt > modified.txt 

字符类[:space:]将匹配所有的空格(空格,制表符等)。 如果您只想replace单个字符,例如。 只是空间,只使用它。

编辑:其实[:空间:]包括回车,所以这可能不会做你想要的。 以下内容将取代制表符和空格。

 sed 's/[:blank:]+/,/g' orig.txt > modified.txt 

一如既往

 sed 's/[\t ]+/,/g' orig.txt > modified.txt 

在所有这一切,你需要小心,你的文件中的空白分隔的项目不包含自己的空白,你想保持,例如。 两个字。

没有看你的input文件,只有一个猜测

 awk '{$1=$1}1' OFS="," 

redirect到另一个文件并根据需要重命名

那么这样的事情呢?

 cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt 

(是的,用一些无用的捕捉和pipe道;也可以使用<从文件直接读取,我想 – 用猫先输出文件的内容,只有之后,我加了sed到我的命令行)

编辑:作为@ ghostdog74在评论中指出,有明确不需要猫/pipe; 你可以把这个文件的名字给sed:

 sed -e 's/\s/,/g' texte.txt > texte-new.txt 

如果“texte.txt”是这样的:

 $ cat texte.txt this is a text in which I want to replace spaces by commas 

你会得到一个“texte-new.txt”,看起来像这样:

 $ cat texte-new.txt this,is,a,text in,which,I,want,to,replace spaces,by,commas 

我不会用新的文件replace旧的文件(如果我没有记错的话,可以用sed -i来完成;而@ ghostdog74说,这个可以接受创build备份) :保持可能是明智的,作为一个安全措施(即使它意味着不得不重新命名为“texte-backup.txt”)

这个命令应该工作:

 sed "s/\s/,/g" < infile.txt > outfile.txt 

请注意,您必须将输出redirect到新文件。 input文件没有改变。

sed可以这样做:

 sed 's/[\t ]/,/g' input.file 

这将发送到控制台,

 sed -i 's/[\t ]/,/g' input.file 

将在原地编辑文件

这是一个Perl脚本,它将在原地编辑这些文件:

 perl -i.bak -lpe 's/\s+/,/g' files* 

连续的空格转换为单个逗号。
每个input文件都被移动到.bak

这些命令行选项被使用:

  • -i.bak编辑并制作.bak副本

  • -p循环input文件的每一行,自动打印行

  • -l在处理之前删除换行符,然后将其添加回来

  • -e执行Perl代码