Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631775
  • 博文数量: 244
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-27 09:53
个人简介

记录学习,记录成长

文章分类

全部博文(244)

我的朋友

分类: 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,一切正常。



自己测试:
[root@bogon ~]# man col > /root/col.txt

Linux下打开该文件:
[root@bogon ~]# less col.txt
COL(1)                    BSD General Commands Manual                   COL(1)
NAME
     col - filter reverse line feeds from input
SYNOPSIS
     col [-bfpx] [-l num]

windows下打开该文件:


使用上述方法:
[root@bogon ~]# rm -rf col.txt
[root@bogon ~]# man col | col -b >/root/col.txt

Linux下打开该文件:
[root@bogon ~]# less col.txt 
COL(1)                    BSD General Commands Manual                   COL(1)
NAME
     col - filter reverse line feeds from input
SYNOPSIS
     col [-bfpx] [-l num]

下载到windows下打开该文件:




在linux下使用vim命令查看生成的command.txt文件时我们会发现其实此“乱码”并非彼乱码,只是在字符间多了很多^H字符,这些字符在vim下显示为蓝色,一般表示控制字符,在Windows下用记事本工具打开则这些字符显示为乱码。


既然我们找到了“乱码”的规律,接下来就容易解决了。我们可以直接使用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参数即可以完成对此控制字符的过滤。

文章来源:

阅读(842) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~