我有几个看起来像这样的文件,例如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'
但还有其他方法吗?
答案 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
重建所有带有一个空格的字段。
此处不会像其他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
答案 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