我有一个文本文件,在某些行中,左边的第一个空格是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
答案 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
这会将每一行拆分为第一个单词,然后回显第一个单词和行的其余部分。结果是第一个单词和行的其余部分之间只有一个空格。