【发布时间】:2018-10-19 22:55:40
【问题描述】:
我想使用 bash 将字符串中的多个相邻空格替换为单个空格。示例:
原字符串:
"too many spaces."
转换后的字符串:
"too many spaces."
我尝试过"${str//*( )/.}" 或awk '{gsub(/[:blank:]/," ")}1' 之类的方法,但我做不到。
注意:我能够使用 <CMD_THAT_GENERATES_THE_INPUT_STRINGH> | perl -lpe's/\s+/ /g' 使其工作,但我必须使用 perl 来完成这项工作。如果可能的话,我想使用 一些 bash 内部语法 而不是调用外部程序。
【问题讨论】:
-
OP 可能正在寻找一种 bash 方式,不一定要求
sed或任何其他外部工具解决方案。 -
只有内置插件,
str="too many spaces.";shopt -s extglob; printf '%s\n' "${str//+([[:space:]])/ }" -
Re:
echo $string | perl注意:当 IFS 为默认值时,echo $stringitself 将用一个空格替换多个空格的运行(连同另一边效果,例如用文件列表替换该字符串中的通配符)- 需要使用echo "$string"将它们保留在其中。(即使那样,echo仍然可以处理内容而不是完全按照它们存在的方式发出它们;@ 987654332@ 更可靠)。 -
@Inian:即使这些标签独立于所使用的编程语言,保留它们只会增加该问题在搜索结果中的可见度。
-
有多少人的标签列表中有“字符串”或“替换”?在怀疑论者阵营中为我着色:那些标签有任何价值。