我想替换
hi@my@name@is@foo
进入
hi@my@name@is
foo
这是" \ n"的最后一个@字符。这是我的尝试性解决方案,但我觉得这可以做得更好。
echo "hi@my@name@is@foo"| perl -pe '$_ = reverse($_);s/@/\n/;$_=reverse($_)'
答案 0 :(得分:5)
在Perl 5.10.0及更高版本中,你可以使用\K
,它实际上是一个可变长度的后视:
echo "hi@my@name@is@foo"| perl -pe 's/.*\K@/\n/'
答案 1 :(得分:3)
您可以使用(.*)
捕获截至上一个@
的所有内容,因为它是贪婪的。
s/(.*)@/\1\n/
答案 2 :(得分:2)
我喜欢消极的前瞻:
echo "hi@my@name@is@foo"| perl -pe 's/@(?!.*@)/\n/'
......但是好的,\K
还是更短。 :)
答案 3 :(得分:1)
你需要的是rindex
echo "hi@my@name@is@foo" | perl -ne ' $cnt=rindex($_,"@");
print substr($_,0,$cnt)."\n".substr($_,$cnt+1)."\n";'