在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代码