linux(十)字符转换
tr
删除一段信息中的文字,进行文字信息的替换
tr [-ds] SET1
- -d : 删除信息中SET1这个字符串
- -s : 取代掉重复的字符。
eg
last | tr '[a-z]' '[A-Z]'
将小写字符转换为大写字符
cat /etc/passwd | tr -d ':'
删除 `:`
unix2dos filename
转换文件换行方式为window类型
dos2unix filename
转换文件换行方式为unix类型
col
处理特殊字符
col [-xb]
- -x : 将tab转换成对等的空白键
eg
cat -A /etc/passwd | col -x
将[tab]表示为对等的空白键而不是`^l`
join
处理两个文件中有相同数据的那一行
join [-ti12] file1 file2
-
-t : join默认以空白字符分隔数据,并且对比第一个字段的数据,
如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个. -
-i : 忽略大小写差异
-
-1 : 数字1,代表"第一个文件要用那个字段来分析"的意思
-
-i : 代表"第二个文件要用那个字段来分析"的意思
eg
join -t ':' /etc/passwd /etc/shadow | head -n 3
因为两个文件的开头都是root,并且以:作为分隔符,这样两个文件的第一行就放在一起了
就像这样
root:x:0:0:root:/root:/bin/zsh:$6$V6wHgIfF$gBrafGiGZDiBDkQHFaYmojtTfjny4ReYZWXwrdx8kUWwe0GQNWwP4ee.gIRFWDD/AicEVRU3NsgOQulXPH8at.:17023:0:99999:7:::
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin:*:17001:0:99999:7:::
bin:x:2:2:bin:/bin:/usr/sbin/nologin:*:17001:0:99999:7:::
下面给出一个稍微复杂一点的示例
head -n 3 /etc/passwd /etc/group
输出如下
root:x:0:0:root:/root:/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
==> /etc/group <==
root:x:0:
daemon:x:1:
bin:x:2:
可以看出,/etc/passwd 的GID在第四项,/etc/group的在第三项,怎么把他们结合起来呢.
join -t ':' -1 4 /etc/passwd -2 3 /etc/group | head -n 3
输出是这样的
0:root:x:0:root:/root:/bin/zsh:root:x:
1:daemon:x:1:daemon:/usr/sbin:/usr/sbin/nologin:daemon:x:
2:bin:x:2:bin:/bin:/usr/sbin/nologin:bin:x:
past
join的简化版,直接将两行贴在一一起,以tab隔开
past [-d] file1 file2
- -d : 后接分隔字符.默认以tab分隔
- : 如果file部分写成
-
,代表标准输入的数据
- : 如果file部分写成
eg
先用cat读出/etc/group,再将 /etc/group /etc/shadow 和标准输入贴在一起,只取出前三行
cat /etc/group | paste /etc/group /etc/shadow - | head -n 3
expand
用来将[tab]转换为空白键
expand [-t] file
- -t : 后面接数字,代表一个[tab]用多少空白字符表示
split
大文件分割成小文件
split [-bl] file PREFIX
- -b : 后接欲分区成的文件大小,可加单位,b,k,m...
- -l : 以行数进行分区
eg
将service 分割成300kb大小
split -b 300k /etc/services services
将分割好的文件命名为servicesaa servicesab....的形式
将分割文件合并(并不限于此)
cat services* >> servicesback
xargs
用来将标准输入切割成参数并转发给需要的命令
xargs [-0epn] command
- -0 : 如果stdin有特殊字符,还原它们
- -e : eof,后接表示终止的字符(串)
- -p : 执行每个指令的argument都会询问使用者
- -n : 后接次数,表示一次使用几个参数
eg
取出/etc/passwd的第一项,取三行并且使用id
命令查询
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id
-
CRLF : 回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
-
这两个ACSII字符不会在屏幕有任何输出,但在Windows中广泛使用来标识一行的结束。而在Linux/UNIX系统中只有换行符。
-
如果有时候需要stdin或stdout,可以用
-
代替 -
本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand,
split, xargs 等。