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

时间:2009-08-13 10:40:48

标签: linux shell csv sed awk

我需要编辑一些文本文件(来自sar的输出)并将其转换为CSV文件。

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

任何人都可以帮助我吗?我使用的每个命令都没有改变文件;我试过gsub

9 个答案:

答案 0 :(得分:76)

tr ' ' ',' <input >output 

用逗号替换每个空格,如果需要,可以使用-s标志(压缩重复)进行传递,用一个替换SET1(空格)中列出的重复字符的每个输入序列这个角色的出现。

在替换标签之后使用挤压重复:

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

答案 1 :(得分:26)

尝试类似:

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

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

编辑:实际上[:space:]包括回车,所以这可能不会做你想要的。以下内容将替换制表符和空格。

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

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

在所有这些中,您需要注意文件中由空格分隔的项目不包含您想要保留的空白,例如。两个字。

答案 2 :(得分:24)

没有查看输入文件,只能猜测

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

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

答案 3 :(得分:10)

这样的事情:

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

(是的,有一些无用的捕捉和管道;也可以使用&lt;直接从文件中读取,我想 - 首先使用cat输出文件的内容,然后才添加sed到我的命令行)

编辑:正如@ ghostdog74在评论中指出的那样,肯定不需要猫/管道;你可以把文件的名称给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

我不会只用新的替换旧文件(如果我没记错的话可以用sed -i完成;而且@ ghostdog74说,这个人会接受动态创建备份):保持可能是明智的,作为安全措施(即使它意味着必须将其重命名为“texte-backup.txt”)

答案 4 :(得分:7)

此命令应该有效:

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

请注意,您必须将输出重定向到新文件。输入文件未就地更改。

答案 5 :(得分:5)

sed可以这样做:

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

这将发送到控制台,

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

将就地编辑文件

答案 6 :(得分:3)

这是一个Perl脚本,可以就地编辑文件:

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

将连续的空格转换为单个逗号 每个输入文件都移动到.bak

使用以下命令行选项:

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

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

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

  • -e执行perl代码

答案 7 :(得分:0)

如果您要用一个逗号替换任意序列的空白字符(制表符,空格),请使用以下命令:

sed 's/[\t ]+/,/g' input_file > output_file

sed -r 's/[[:blank:]]+/,/g' input_file > output_file

如果您的某些输入行包含多余的前导空格字符,无需将其转换为逗号,则首先需要删除它们,然后将其余的空白字符转换为逗号。对于这种情况,请使用以下命令:

sed 's/ +//' input_file | sed 's/[\t ]+/,/g' > output_file

答案 8 :(得分:0)

这对我有用。

sed -e 's/\s\+/,/g' input.txt >> output.csv