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

Bash 用单个空间替换文件中不同数量的空间,bash,sed,Bash,Sed,我有一个文件列表,其中的列由不同数量的空格分隔。如何使用sed或类似方法,使每一列由单个空格或制表符分隔 我试过: sed 's/ \+ /\t/g' file > tmp sed "s/\ /\t/g" tmp > file 但他抱怨道 line 526 did not have 11 elements 你可以用 内联sed sed -i.bak -e 's/ \+/ /g' fileName 你可以用 内联sed sed -i.bak -e 's/ \+/ /g' fi

我有一个文件列表,其中的列由不同数量的空格分隔。如何使用sed或类似方法,使每一列由单个空格或制表符分隔

我试过:

 sed 's/ \+ /\t/g' file > tmp
 sed "s/\ /\t/g" tmp > file
但他抱怨道

line 526 did not have 11 elements
你可以用

内联sed

sed -i.bak -e 's/ \+/ /g' fileName
你可以用

内联sed

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

这将占用一个或多个空格,并转换为表达式第二部分(“\t”)中的字符串。

请尝试:


这将占用一个或多个空格,并转换为表达式第二部分(“\t”)中的字符串。

假设您有一个名为“raw\u file”的文件,其中包含下面的文本

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'
输出到名为“my_NEW_FILE”的新文件时会产生结果。

输出到终端时的结果

使用的命令:

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

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

假设您有一个名为“raw\u file”的文件,其中包含下面的文本

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'
输出到名为“my_NEW_FILE”的新文件时会产生结果。

输出到终端时的结果

使用的命令:

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

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

awk将直接轻松地处理空白

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

or

awk '$1=$1' OFS="\t" infile     # convert to single tab
如果必须使用SED,字符类
\s
将匹配空格字符
选项卡
空格

因此,您的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

awk将直接轻松地处理空白

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

or

awk '$1=$1' OFS="\t" infile     # convert to single tab
如果必须使用SED,字符类
\s
将匹配空格字符
选项卡
空格

因此,您的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

+欢迎来到这个网站。您也可以指定“-i”作为替换,谢谢!-i选项很有用,但请小心提供创建备份所需的后缀。很容易用-i单独覆盖单个副本。+1欢迎访问该网站。您也可以指定“-i”作为替换,谢谢!-i选项很有用,但请小心提供创建备份所需的后缀。很容易用-i单独覆盖一个副本。我在
tr
命令中没有
-s
选项,我的tr版本是
tr(GNU coreutils)8.4
运行在
centOS
,你能分享你的
tr
版本吗?我在
tr
命令中没有
-s
选项,我的tr版本是
tr(GNU coreutils)8.4
运行在
centOS
上,您能分享您的
tr
版本吗?