用单个空格替换文件中不同数量的空格

时间:2014-12-06 00:39:06

标签: bash sed

我有一个文件列表,这些文件的列以不同数量的空格分隔。我可以选择或类似这样,以便每列用一个空格或标签分隔吗?

我试过了:

 sed 's/ \+ /\t/g' file > tmp
 sed "s/\ /\t/g" tmp > file

但R抱怨

line 526 did not have 11 elements

4 个答案:

答案 0 :(得分:3)

您可以使用tr

tr -s < fileName

sed

sed -e 's/ \+/ /g' fileName

内联sed

sed -i.bak -e 's/ \+/ /g' fileName

答案 1 :(得分:2)

尝试:

sed 's/ \{1,\}/\t/g' file > tmp

这需要一个或多个空格并转换为表达式第二部分中的字符串(&#39; \ t&#39;此处)。

答案 2 :(得分:0)

假设你有一个名为&#34; raw_file&#34;的文件。

中有下面的文字
COLUMN1            COLUMN2         COLUMN3     COLUMN4
I      am   a boy
Hello word

I            see you
I am 5 years
How are    you?

您可以使用命令:

sed 's/ \{1,\}/ /g' '/root/Desktop/raw_file' |column -s ' ' -t > '/root/Desktop/my_new_file'

输出到新文件时的结果&#34; my_new_file&#34;

COLUMN1  COLUMN2  COLUMN3  COLUMN4
I        am       a        boy
Hello    word
I        see      you
I        am       5        years

输出到终端时的结果

使用的命令:

sed 's/ \{1,\}/ /g' '/root/Desktop/raw_file' |column -s ' ' -t 2>  /dev/null

结果:

COLUMN1  COLUMN2  COLUMN3  COLUMN4
I        am       a        boy
Hello    word
I        see      you
I        am       5        years

注意:每列用两个空格分隔。

答案 3 :(得分:0)

awk将直接轻松地处理空白

awk '$1=$1' infile     # convert to single space

or

awk '$1=$1' OFS="\t" infile     # convert to single tab

如果您必须使用SED,则字符类\s将匹配空白字符tabspace

所以您的sed代码可以修复为

sed 's/\s\{1,\}/ /g' infile

or

sed 's/\s\{1,\}/\t/g' infile

如果您的sed支持-r选项,

sed -r 's/\s+/ /g' infile

or

sed -r 's/\s+/\t/g' infile