我找到了一个非常有用的perl here,它将文本文件的文件名写入文件的第一行。我在OS X Yosemite的终端上运行它:
perl -i -pe 'BEGIN{undef $/;} s/^/\nFilename:$ARGV\n/' `find . -name '*.TXT'`
经过一些修改,我认为它已经解决了我的具体问题,但是我收到的文件是UTF-16LE,而且我发现这个命令是用UTF-8编写的,并且真正搞乱了输出(文本明显正确但在excel,filemaker等的计算中无法识别)。
经过多次尝试,我需要帮助才能让这个脚本将UTF-16LE中的文件名写入文件的开头。 (注意:我现在有一个解决方法,批量转换文件到UTF-8,然后运行它,但我更喜欢一步完成这个工作流程。)
答案 0 :(得分:1)
reinierpost是正确的 - 它更多的是删除原始的unicode字节顺序标记(BOM)。最终有效的是:
perl -i -pe 'BEGIN{undef $/;} s/\xFF\xFE/Filename:$ARGV\n/' `find . -name '*.TXT'`
其中UTF-16LE BOM \ xFF \ xFE由我的新字符串替换。作为参考,一些其他BOM表是: - iso-10646-1> \ xFE如果\ XFF - UTF-16BE> \ xFE如果\ XFF - UTF-8> \ XEF \ XBB \ XBF
我还可以用
将新文本写入UTF-16LEperl -i -pe 'BEGIN{binmode STDIN,":encoding(utf8)";binmode STDOUT,":encoding(utf16)"; undef $/;} s/\xFF\xFE/\xFF\xFE\nFilename:$ARGV\n/' `find . -name '*.TXT'`
但我现在认为我的源数据是UTF8和UTF16的混合包,因为最后一个版本在新标题和数据之间创建了一组混合字符。感谢reinierpost指导我正确的方向。如果其他人可以改善这一点,我仍然感兴趣。