0

I have a line of shell script that I need to recreate the functionality of in Windows Perl?

 tr -cd '[:print:]\n\r' | tr -s ' ' | sed -e 's/ $//'

The sed part is easy but not being a shell scripting expert (or perl expert for that matter) I'm having trouble recreating the functionality of the tr command in Perl.

4

1 回答 1

4

将这些位分解为每个位的功能并将其转换为 Perl:

tr -cd '[:print:]\n\r'

-c取可打印字符、换行符和回车的补码 ( ) 并删除它们 ( -d)。tr 联机帮助页会告诉您其中的每一个是做什么的。

tr -s ' '

将多个相同的字符 ( ) 折叠-s成一个字符。

sed -e 's/ $//'

摆脱尾随空格。

现在只需使用您想要使用的任何语言来执行此操作。把它放在一起,你可能会喜欢这样的东西:

perl -pe 's/\P{PosixPrint}//g; tr/ //s; s/ \z//;'

请注意,Perl 的tr不做字符类,但我可以使用补码(\P{...}带有大写 P)的Unicode 字符类来做同样的事情。Perl 字符类也理解常规的 POSIX 字符类。

于 2013-10-08T20:40:04.790 回答