使用sed删除bash中的空格

时间:2015-04-21 00:11:59

标签: bash unix sed whitespace uniq

我有一个文件,其中包含一个数字,后面跟着大量文件的每行文件路径。所以它看起来像这样:

      7653 /home/usr123/file123456

但问题是它之前有6个空白空格,它会抛弃我脚本的其余部分。我在下面列出了产​​生它的行:

cat temp | uniq -c | sed 's/  */ /g' > temp2

我将其缩小为uniq命令,产生不必要的空白区域。我试图实现一个sed命令来删除空格,但由于某种原因它删除除了一个以外的所有空格。如何修改我的sed语句或我的uniq语句以摆脱这些空格?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:9)

要删除所有前导空格,请使用:

sed 's/^ *//g'

删除任何类型的所有前导空格:

sed 's/^[[:space:]]*//g'

^符号仅匹配行的开头。因此,上面将只留下不在行开头的任何空格。

答案 1 :(得分:0)

分解你当前的sed模式的/ * / / g': 搜索模式'*'匹配单个空格,后跟零个或多个空格。替换模式''是一个单独的空间。结果是找到一个或多个空格的任何集合并将其替换为单个空格,因此除去其中一个空格。要使其全部删除,您可以将替换模式设为空字符串'':sed's / * // g'

但请注意,'g'使其成为全局,因此也会删除数字和文件路径之间的空格。如果你只想删除前导空格,你可以放弃g。您也可以使用+量词,这意味着“至少一个”,而不是*,这意味着“至少为零”。 这会让你:sed's / \ + /'

ETA:正如John1024所指出的那样,你也可以使用^ anchor来指定行的开头,并使用\ s通配符来指定任何空格字符而不仅仅是空格:sed's / \ s \ + // “