我有几个文件看起来像这些,如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'
但是否有其他方法吗?
我有几个文件看起来像这些,如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'
但是否有其他方法吗?
您可以将两者结合起来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
这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
重建所有字段具有一个空间。
这不,在年底,因为大多数其他的添加空间sed
和perl
命令在这里。
或基于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
通过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
sed 's/ //g;s/./& /g' filename
&
:是指匹配的模式空间的那部分
或者,也许像这样的东西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
这可能会为你工作(GNU SED):
sed 's/\B/ /g' file