认识bash shell5--管道命令(pipe)之字符转换命令
字符转换命令tr, col, join ,paste, expand① tr:可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换
tr [-ds] SET1
-d :删除讯息当中的 SET1 这个字符串;
-s :取代掉重复的字符!
例如:将 last 输出的讯息中,所有的小写发成大写字符:last |tr ‘’ ‘’
将 /etc/passwd 输出的讯息中,将冒号 (:)删除:cat /etc/passwd | tr -d ‘:’
将 /etc/passwd 转存成 dos 断行到 /root/passwd 中,再将 ^M 符号删除:
cp /etc/passwd /root/passwd && unix2dos /root/passwd
cat /root/passwd | tr -d '\r' > /root/passwd.linux
② col:可以用来简单的处理将tab按键取代为空格键
col [-xb]
-x 将tab键转换成对等的空格键
-b 在文字内有反斜杠(/),仅保留反斜杠最后接的那个字符
例如:利用 cat -A 显示出所有特殊按键,最后以 col 将 转成空白:cat -A /etc/man.config |col -x |cat -A |more
③ join:处理两个档案时,有相同数据的那一行,将它加在一起。需要注意的是,在使用join之前,所需处理的档案应该要事先经过排序(sort)处理!否则有些比对的项目会被略过。
join [-ti12] file1 file2
-t :join 默认以空格符分隔数据,并且比对『第一个字段』的数据,如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i :忽略大小写的差异;
-1 :这个是数字 1 ,代表第一个档案要用哪个字段来分析;
-2 :代表第二个档案要用哪个字段来分析
例如:用 root 的身份,将 /etc/passwd 与 /etc/shadow 相关数据整合成一栏(这两个档案的最左边字段都是账号,且以 : 分隔):join -t ‘:’/etc/passwd/etc/shadow
/etc/passwd 第四个字段是 GID , GID 记录在/etc/group 当中的第三个字段,如何将两个档案整合: join -t ':' -1 4 /etc/passwd -2 3 /etc/group
④ paste:paste 就要比 join 简单多了,相对于 join 必须要比对两个档案的数据相关性, paste 就直接『将两行贴在一起,且中间以 键隔开。
paste [-d] file1 file2
d :后面可以接分隔字符。预设是以 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的资料。
例如:将 /etc/passwd 与 /etc/shadow 同一行贴在一起:paste /etc/passwd /etc/shadow
⑤ expand:将 按键转成空格键,unexpand 可以将空白转成 。
expand [-t] file
-t :后面可以接数字。一般来说,一个 tab 按键可以用 8 个空格键取代。也可以自行定义一个 按键代表多少个字符。
例如:将 /etc/man.config 内行首为 MANPATH 的字样就取叏出;仅取前三行;将 按键设定成 6 个字符;将所有的符号都列出来
grep '^MANPATH' /etc/man.config | head -n 3 | expand -t 6 | cat -A
页:
[1]