我需要逃避\ n输出我真的得到换行符或标签
$ perl -p -e 's/e/a/ge'
现在我希望每个e都被\ n
替换$ perl -p -e 's/e/\n/ge'
但即使\ n也给我一个错误。
这是一个简化的例子。在实际脚本(makefile)中我有
substitute := perl -p -e 's/@([^@]+)@/defined $$ENV{$$1} ? $$ENV{$$1} : $$1/ge'
并且在目标中我有一个很好的命令
$(substitute) $< > $@
如果perl的输入文件在输出中包含\n
,我会在字面上看到它......我想要真正的换行符。
答案 0 :(得分:4)
删除e
修饰符,替换工作正常:
perl -p -e 's/e/\n/g' file
e Evaluate the right side as an expression.
UPD:如果要保留它,请将转义序列放在双引号中:
perl -p -e 's/e/"\n"/ge' file
答案 1 :(得分:3)
在你的正则表达式中你真的不需要e
:
dpavlin@llin:~/private/home_html$ perl -p -e 's/e/\n/g'
foedoe
fo
do
答案 2 :(得分:3)
要插入自身需要插值的内容(如变量或转义),请使用双e并添加引号:
perl -p -e 's/@([^@]+)@/q!"! . ( defined $ENV{$1} ? $ENV{$1} : $1 ) . q!"!/gee'
如果替换本身包含未转义的“或$或@,则无效;在这种情况下,您需要单独执行反斜杠转义处理。
答案 3 :(得分:0)
echo xeieio | perl -pe 's/(.)/$k=$1;$k=~s#e#\n#;$k/ge'
输出:
X
我
我好
它做什么...对于每个角色,将其分配给$ k,在$ k上运行一个简单的s / e / \ n /,然后打印$ k。 (另外,一如既往,有多种方法可以做到这一点)