分类: LINUX
2016-07-29 16:43:36
为了写关于linux命令的文章,懒得手动去输入,就想着把man命令的内容输出到.txt文档,然后在Windows直接拷贝粘贴。使用命令:
[root@centos ~]# man command >/home/command.txt
结果输出的文档在Windows操作系统下打开显示乱码(在linux操作系统下用vim命令查看同样显示乱码),在word下采用UTF-8或其它编码都不行。
解决办法就是稍微更改一下命令,改为:
[root@centos ~]# man command | col -b >/home/command.txt
再次打开command.txt,一切正常。
既然我们找到了“乱码”的规律,接下来就容易解决了。我们可以直接使用vim命令解决,具体方法如下:
在编辑模式下,输入:进入命令模式,在后面输入%s/^H//g。完整的就是:%s/^H//g。(一定注意输入^H的方法是先按住Ctrl键不放手,然后依次键入V和H,copy是没有用的,要手动输入)输入完成后按Enter键执行命令。待命令执行完成之后,我们来查看结果,发现依然不是我们想要的,因为同时出现了很多重复的字母。这又该怎么解决呢?也不用着急,我们稍稍修改一下命令即可解决了。具体是将命令修改为:%s/.^H//g。按下回车键待命令执行完成,我们再来查看一下这篇文档会发现已经完全恢复到它本来应该有的样子了!
这是什么原理呢?我们回过头来再观察一下那些有规律的“乱码”,其实不仅仅是控制字符^H,在这个字符前面还有一个字符或者空格,我们需要同时将之删除。所以对命令进行简单的调整后问题迎刃而解。
在第一个解决方法中,其中的关键是命令col。col指令是一个标准的文本输入过滤器,它从标注输入设备读取文本内容,并把标注内容显示到标注输出设备。在许多UNIX/LINUX说明文件里,都有RLF控制字符。当我们运用shell特殊字符”>”和”>>”,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。
关于col命令的详情,请浏览:http://myblog.jyc.edu.cn/?p=62。
在这个问题中,将man手册的内容输出到文本文件中时会带有控制字符“H(表示Backspace (退格))”,使用vim编辑器即可以看到。所以使用col命令带-b参数即可以完成对此控制字符的过滤。
文章来源: