Linux【2】-管理文件-2-3-字符的转换(dos2unix,tofrodos,tr,col,expand)
一、常用的一些字符转换命令
1.1 字符转换命令col
[root@www ~]# col [-xb]
选项与参数:
-x :将 tab 键转换成对等的空格键
-b :过滤掉所有的控制字符,包括RLF(Reverse Line Feed)和HRF(Halt RLF)
范例一:利用 cat -A 显示出所有特殊按键,最后以 col 将 [tab] 转成空白
[root@www ~]# cat -A /etc/man.config <==此时会看到很多 ^I 的符号,那就是 tab
[root@www ~]# cat /etc/man.config | col -x | cat -A | more
如此一来, [tab] 按键会被取代成为空格键,输出就美观多了!
范例二:将 col 的 man page 转存成为 /root/col.man 的纯文本档
[root@www ~]# man col > /root/col.man
[root@www ~]# vi /root/col.man
COL(1) BSD General Commands Manual COL(1)
N^HNA^HAM^HME^HE
c^Hco^Hol^Hl - filter reverse line feeds from input
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
c^Hco^Hol^Hl [-^H-b^Hbf^Hfp^Hpx^Hx] [-^H-l^Hl _^Hn_^Hu_^Hm]
# 你没看错!由于 man page 内有些特殊按钮会用来作为类似特殊按键与颜色显示,
# 所以这个文件内就会出现如上所示的一堆怪异字符(有 ^ 的)
[root@www ~]# man col | col -b > /root/col.man
虽然 col 有他特殊的用途,不过,很多时候,他可以用来简单的处理将 [tab] 按键取代成为空格键! 例如上面的例子当中,如果使用 cat -A 则 [tab] 会以 ^I 来表示。 但经过 col -x 的处理,则会将 [tab] 取代成为对等的空格键!此外, col 经常被利用于将 man page 转存为纯文本文件以方便查阅的功能!
1.2 tr
linux 中文件有^M。
原因:windows的换行符和linux的不一样。解决办法:
cat yourfile | tr -s "\r\n" "\n" > newfile
这个过程中尝试了网上各种方法,上面的方法亲测有效。
参数:
-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
例子:
将输入字符由大写转换为小写:
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
‘A-Z’ 和 ‘a-z’都是集合,集合是可以自己制定的,例如:‘ABD-}'、‘bB.,'、‘a-de-h’、‘a-c0-9’都属于集合,集合里可以使用’\n’、'\t’,可以可以使用其他ASCII字符。
使用tr删除字符:
echo "hello 123 world 456" | tr -d '0-9'
hello world
将制表符转换为空格:
cat text | tr '\t' ' '
字符集补集,从输入文本中将不在补集中的所有字符删除:
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
1 2 3 4
此例中,补集中包含了数字0~9、空格和换行符\n,所以没有被删除,其他字符全部被删除了。
用tr压缩字符,可以压缩输入中重复的字符:
echo "thissss is a text linnnnnnne." | tr -s ' sn'
this is a text line.
巧妙使用tr做数字相加操作:
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]
tr可以使用的字符类:
[:alnum:]:字母和数字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
1.3 expand
将 tab 转换一定数量的空格,默认是 8 个。
$ expand [-t] file
-t :tab 转为空格的数量
二、讨论
2.1 linux和windows换行符转换
有三种方法:
- dos2unix
- tofrodos
- tr
2.1.1 dos2unix
dos2unix file_name
2.1.2 tofrodos
Ubuntu下默认没有安装dos2unix工具,而且也没有一个叫这个名字的工具(我在solaris里用过dos2unix,不知道为啥Ubuntu没有)。但是有一个替代工具——tofrodos , 下面就说一下它的安装和使用。 当然还是apt安装啦。
1.安装tofrodos
sudo apt-get install tofrodos
实际上它安装了两个工具:todos(相当于unix2dos),和fromdos(相当于dos2unix) 安装完即可,现在你已经可以进行文本格式的转换啦。
centos的安装
yum install dos2unix
比如:
todos Hello.txt (即unix2dos Hello.txt)
fromdos Hello.txt (即dos2unix Hello.txt)
2.做一些优化
由于习惯了unix2dos和dos2unix的命令,可以把上面安装的两个工具链接成unix2dos 和dos2unix,或者仅仅是起个别名,并放在启动脚本里。 步骤:
ln -s /usr/bin/todos /usr/bin/unix2dos
ln -s /usr/bin/fromdos /usr/bin/dos2unix
或者在 ~/.bashrc里起个别名
vi ~/.bashrc
#添加
alias unix2dos=todos alias dos2unix=fromdos
参考资料
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn