0

我有一个文本文件,在某些行中,左边的第一个空格是 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
4

3 回答 3

3

tr方式:

cat test.txt | tr -s ' '
于 2013-04-17T00:56:32.053 回答
2

使用 sed:

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

从左边开始

^ 

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

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

和任意数量的额外空格:

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

并将这些替换为捕获的部分:

 \1
于 2013-04-17T00:51:05.800 回答
2

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

您可以使用 sed。

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

这用一个空格替换了第一次出现的一个或多个空格。

但是您也可以纯粹在 bash 中执行此操作:

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

这会在第一个单词处拆分每一行,并回显第一个单词和该行的其余部分。结果是第一个单词和该行的其余部分之间只有一个空格。

于 2013-04-17T00:53:15.290 回答