我能够在sed命令中完成此操作,但无法在perl中运行它。希望在彼此靠近且没有空格或字母数字的管道字符之间添加空格。
input ==> a|123|##|||| expected output ==> a|123|##| | | |
此sed
命令运行正常:
echo "a|123|##||||" | sed 's/\([^[:blank:][:alnum:]]\)|/\1 | /g'
上述命令的输出==> a|123|## | | | |
在perl中,我无法正常运行
echo "a|123|##||||" | perl -pe 's/\([^[:blank:][:alnum:]]\)|/\1 | /g'
具有上述命令的输出
| a | | | 1 | 2 | 3 | | | # | # | | | | | | | | |
答案 0 :(得分:6)
仅在彼此相邻的|
之间添加空间
echo "a|123|##||||" | perl -pe's/\|(?=\|)/\| /g'
我先行使用,以便能够检测到连续(且重叠!)对,并且将两个以上的|
串在一起:仅消耗了比赛中的第一个,因此第二个停留在那里下一场比赛,以防万一之后又发生了一场比赛(再次用前瞻性断言)。
答案 1 :(得分:2)
另一种同时使用超前和后向的方式。
$ echo "a|123|##||||" | perl -pe's/(?<=\|)(?=\|)/ /g '
a|123|##| | | |
$
答案 2 :(得分:0)
正确的Perl语法为:
echo "a|123|##||||" | perl -pe 's/([^\s\w])\|/$1 | /g'