我有一行shell脚本需要重新创建Windows Perl的功能吗?
tr -cd '[:print:]\n\r' | tr -s ' ' | sed -e 's/ $//'
sed部分很简单但不是shell脚本专家(或perl专家)我在Perl中重新创建tr命令的功能时遇到了麻烦。
答案 0 :(得分:4)
将这些位分解为每个位并将其转换为Perl:
tr -cd '[:print:]\n\r'
获取可打印字符,换行符和回车符的补码(-c
)并删除它们(-d
)。 tr manpage告诉您每个人都做了哪些。
tr -s ' '
将多个相同的字符(-s
)折叠为一个字符。
sed -e 's/ $//'
摆脱尾随空间。
现在只需使用您想要使用的任何语言即可。把它放在一起,你可能喜欢这样的东西:
perl -pe 's/\P{PosixPrint}//g; tr/ //s; s/ \z//;'
请注意,Perl的tr不会执行字符类,但我可以使用补充的(\P{...}
使用大写的P)Unicode character class来执行相同的操作。 Perl字符类也理解常规的POSIX字符类。