我有一句话:
171211 22043707 21641 xxxx xxxxxxx From (,,xxxx,xxxx) Vxxxx1: xxxxxx
171212 13441585 417 xxxx xxxxxxxx Server manager informed of process termination, pinfo = x,0000032585 13:44:15
171211 22043707
问题是和之间的空格21641
不同。我想用一个空格替换它。我该怎么做?哪个sed
命令可以匹配一个或多个空格?
答案1
有了它,tr
你就能更轻松地完成这些事情:
tr -s ' '
来自tr
男人:
-s, --squeeze-repeats
replace each input sequence of a repeated character that is
listed in SET1 with a single occurrence of that character
答案2
sed 's/ \{2,\}/ /' # or
sed -E 's/ {2,}/ /'
此命令将第一次出现的两个或多个 ( {2,}
) 空格替换为单个空格,这与示例中的第一个大间隙相匹配。如果您想替换每一个g
出现两个或多个空格,在命令末尾添加:
sed 's/ \{2,\}/ /g' # or
sed -E 's/ {2,}/ /g'
如果您只想替换三个或更多空格的序列,请相应地更改数字。
答案3
仔细阅读man sed
,和man 7 regex
,你就会明白:
sed -e 's/ \+/ /g'
将把整行上的多个相邻空格更改为一个空格。