如果第一个空格是2个空格,则在文件中将其设为1

时间:2013-04-17 00:44:30

标签: regex linux bash shell unix

我有一个文本文件,在某些行中,左边的第一个空格是2个空格长,我希望它是1个空格长。什么是bash中的脚本?

123  2  5//problem
1 2  5
1 2  5
1  32  5//problem

我想要什么

123 2  5
1 2  5
1 2  5
1 32  5

3 个答案:

答案 0 :(得分:3)

tr方式:

cat test.txt | tr -s ' '

答案 1 :(得分:2)

使用sed:

sed 's/^\([^ ][^ ]*[ ]\)[ ]*/\1/' input

从左侧开始

^ 

匹配并捕获非空格字符和空格

\([^ ][^ ]*[ ]\)

以及任意数量的额外空格:

[ ]*   # remove the star if you only care about exactly 2 spaces 

并将其替换为捕获的部分:

 \1

答案 2 :(得分:2)

编辑:我意识到大卫的答案几乎是正确的。

您可以使用sed。

cat x | sed -e 's/ \+/ /'

这将使用单个空格替换第一个出现的一个或多个空格。

但你也可以纯粹用bash来做:

cat x | while read a b ; do echo "$a" "$b" ; done

这会将每一行拆分为第一个单词,然后回显第一个单词和行的其余部分。结果是第一个单词和行的其余部分之间只有一个空格。