我有一个文本文件,在某些行中,左边的第一个空格是 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
tr
方式:
cat test.txt | tr -s ' '
使用 sed:
sed 's/^\([^ ][^ ]*[ ]\)[ ]*/\1/' input
从左边开始
^
匹配并捕获非空格字符和空格
\([^ ][^ ]*[ ]\)
和任意数量的额外空格:
[ ]* # remove the star if you only care about exactly 2 spaces
并将这些替换为捕获的部分:
\1
编辑:我意识到大卫的回答几乎是正确的。
您可以使用 sed。
cat x | sed -e 's/ \+/ /'
这用一个空格替换了第一次出现的一个或多个空格。
但是您也可以纯粹在 bash 中执行此操作:
cat x | while read a b ; do echo "$a" "$b" ; done
这会在第一个单词处拆分每一行,并回显第一个单词和该行的其余部分。结果是第一个单词和该行的其余部分之间只有一个空格。