如何在命令行上使用 perl 只打印包含希腊语 unicode 字符的行?例如,仅以下行中的第二行
hullo, world
χαῖρε, ὦ κόσμε
应该可以使用\p{Greek}
而不是明确的范围(0370-03ff、1f00-1fff)。
不使用 perl 的方法也受欢迎,但我怀疑 sed、awk、grep 不能做到这一点?
答案1
你可以按照以下方式运行一些东西
perl -C -ne '/\p{Greek}/ and print'
答案2
您使用哪种编码?如果是UTF-8,你可以这样做:
perl -CSD -ne 'print if /\p{Greek}/' input_utf8.txt >output_utf8.txt
请参阅-C
在 perlrun 中切换。
如果是其他编码,您可以使用open
杂注以进行更详细的控制。
例如,读取和写入 UTF-16-LE:
perl -Mopen=':std,:encoding(UTF-16-LE)' -ne 'print if /\p{Greek}/' input_utf16le.txt >output_utf16le.txt
或者,读取 UTF-16-LE 文件并以 UTF-8 输出:
perl -Mopen=':encoding(UTF-16-LE)' -CS -ne 'print if /\p{Greek}/' input_utf16le.txt >output_utf8.txt
或者,读取 UTF-16-LE 并写入 UTF-16-BE:
perl -Mopen=':std,:encoding(UTF-16-BE),IN,:encoding(UTF-16-LE)' -ne 'print if /\p{Greek}/' input_utf16le.txt >output_utf16be.txt
perl ... input.txt >output.txt
对于后两者,请注意和之间存在微妙但重要的区别perl ... <input.txt >output.txt
,因为后者从 读取STDIN
,而前者open
读取文件,因此请务必记住要更改哪个流的编码。