如何在所有文本文件中删除/添加空格?

时间:2014-08-23 17:33:34

标签: unix sed whitespace

我有几个看起来像这样的文件,例如test.in

apple foo bar
hello world

我需要实现这个所需的输出,即每个角色后面的空格:

a p p l e f o o b a r
h e l l o w o r l d

我可能会首先删除所有空格,然后为每个字符添加空格,如下:

sed 's/\s//g' test.in | sed -e 's/\(.\)/\1 /g'

但还有其他方法吗?

6 个答案:

答案 0 :(得分:3)

awk可能会:

awk -v FS="" '{gsub(/ /,"");$1=$1}1' file
a p p l e f o o b a r
h e l l o w o r l d

首先删除所有空格,然后由于FS(字段分隔符)设置为空,$1=$1重建所有带有一个空格的字段。

此处不会像其他sedperl命令那样在最后添加空格。


或基于此处发布的sed

awk '{gsub(/ /,"");gsub(/./,"& ")}1' file
a p p l e f o o b a r
h e l l o w o r l d

答案 1 :(得分:2)

通过perl,

$ perl -ple 's/([^ ]|^)(?! )/\1 /g' file
a p p l e f o o b a r 
h e l l o w o r l d 

添加内联编辑选项-i以保存所做的更改

perl -i -ple 's/([^ ]|^)(?! )/\1 /g' file

答案 2 :(得分:2)

sed 's/ //g;s/./& /g' filename

&:指模式空间中与

匹配的那部分

答案 3 :(得分:2)

或者sed可能是这样的:

$ sed 's/./& /g;s/  //g' file
a p p l e f o o b a r
h e l l o w o r l d

答案 4 :(得分:2)

您可以将两个sed命令合并为一个命令:

$ sed 's/\s//g;s/./& /g' test.in 
a p p l e f o o b a r 
h e l l o w o r l d 

请注意使用.&代替\(.\)\1

在不支持\s指定匹配空格的系统上,您可以使用[[::blank::]]代替:

$ sed 's/[[:blank:]]//g;s/./& /g' test.in 
a p p l e f o o b a r 
h e l l o w o r l d 

答案 5 :(得分:2)

这可能适合你(GNU sed):

sed 's/\B/ /g' file