如何使用 perl 正则表达式转换以下文本:
1100101
1100111
1110001
1110101
进入
1 1 0 0 1 0 1
1 1 0 0 1 1 1
1 1 1 0 0 0 1
1 1 1 0 1 0 1
我尝试使用
perl -pe 's// /g' < text.txt
但它给了我一些类似这样的有趣结果:
1 1 0 0 1 0 1
1 1 0 0 1 1 1
1 1 1 0 0 0 1
1 1 1 0 1 0 1
perl -pe 's/(?<=[^\n])([^\n])/ \1/g'
为什么要使用正则表达式?
perl -pe '$_ = join " ", split ""'
使用前瞻:
perl -pe 's/(\d)(?=.)/$1 /g'
使用前瞻和后瞻:
perl -pe 's/(?<=\d)(?=.)/ /g'
使用自动拆分的另一种方法:
perl -F// -ane 'print "@F";' file
或者像这样...
$ perl -pe 's/(?<!^)(\d)/ \1/g' input
1 1 0 0 1 0 1
1 1 0 0 1 1 1
1 1 1 0 0 0 1
1 1 1 0 1 0 1
...这里对负正则表达式有一个很好的解释: perl string pattern match的负正则表达式
你快到了:
perl -pe 's/(.)/$1 /g' your_file
测试如下:
> cat temp
1100101
1100111
1110001
1110101
> perl -pe 's/(.)/$1 /g' temp
1 1 0 0 1 0 1
1 1 0 0 1 1 1
1 1 1 0 0 0 1
1 1 1 0 1 0 1