管道命令
概念
管道命令只会处理stdout,忽略stderr
管道命令后面接的第一个数据必定是命令,这个命令必须能够接收stdin
选取命令
作用:取出我们想要的数据
cut
用途:将一行信息的某一段切出来
缺点:处理多空格相连的数据比较差
cut -d ‘分隔字符‘ -f fields
-d 后面接分割字符,与-f一起使用
-f 依据-d将一段信息切割成数段,用-f取出第几段
例
取出PATH的第五个路径
echo $PATH | cut -d ‘:‘ -f 5
取出PATH的第三个和第五个路径
echo $PATH | cut -d ‘:‘ -f 3,5
cut -c 字符范围
-c 以字符为单位取出固定字符区间
例
取出每一行12个字符之后的所有字符
export|cut -c 12-
取出每一行第12~20之间的所有字符
export|cut -c 12-20
grep
用途:分析一行信息,如果当中有我们需要的信息,就将该行拿出来
grep [-acinv] [--color=auto] ‘查找字符串‘ filename
a 将binary文件以text文件的方式查找数据
c 计算找到‘查找字符串‘的次数
I 忽略大小写
n 输出行号
v 反向选择,即查找没有‘查找字符串‘的那一行
--color-auto 将找到的关键字颜色显示
排序命令
sort
用途:依据不同的数据类型来排序
sort [-fbMnrtuk] [file or stdin]
f 忽略大小写的差异
b 忽略最前面的空格符部分
M 以月份的名字来排序
n 以纯数字排序
r 反向排序
t 分隔符,默认使用[Tab]分隔
u unique,相同的数据只出现一行代表
k 以那个区间来进行排序
例
cat /etc/passwd | sort -t ‘:‘ -k 3
wc
用途:统计多少字、多少行、多少字符
wc [-lwm]
l 仅列出多少行
w 仅列出多少字(英文单字)
m 仅列出多少字符
uniq
用途:相同的数据,仅出现一行代表
特殊:可以计数
uniq [-ic]
i 忽略大小写,等效于sort -fu
c 进行计数
双向重定向
tee
用途:让stdout转存一份到文件内,并将同样的数据继续送到屏幕处理
tee [-a] file
a 不加a为>到file,加a为>>到file
例
ls -l /| tee -a ~/homefile |more
字符转换命令
tr
用途:删除或替换一段信息当中的文字
tr [-ds] SET1 ...
无参数时进行替换操作
d 删除信息当中的SET1
s 重复的SET1只用一个表示
例
原本
aab,bbc,ccd,dda
AAB,BBC,CCD,DDA
小写变大写
cat a.log | tr ‘[a-d]‘ ‘[A-D]‘
AAB,BBC,CCD,DDA
AAB,BBC,CCD,DDA
小写去重复
cat a.log | tr -s ‘[a-d]‘
ab,bc,cd,da
AAB,BBC,CCD,DDA
小写变大写去重复
cat a.log | tr -s ‘[a-d]‘ ‘[A-D]‘
AB,BC,CD,DA
AB,BC,CD,DA
col
用途:将[Tab]按键替换为对等的空格键
经常用来将man page转存为纯文本文件以方便查阅
col [-xb]
x 将[Tab]键转换为对等的空格键
b 文字内有/时,仅保留/最后接的那个字符
例
cat /etc/man.confg|col -x| cat -A| more
man col | col -b > /root/col.man
join
用途:两个文件当中有相同数据的那一行加在一起
注意:两个文件最好事先经过排序(相同数据那一行)
join [-ti12] file1 file2
t 指定分隔符号,默认空格符
i 忽略大小写
1 指定第一个文件用那个字段来分析
2 制定第二个文件用哪个字段来分析
例
将两个文件第一个字段相同者整成一行
join -t ‘:‘ /etc/passwd /etc/shadow
使用GID将两个文件整成一行
join -t ‘:‘ -1 4 /etc/passwd -2 3 /etc/shadow
注:结果GID会在第一列,其余列按顺序排列,相同的前几个字段不再出现
paste
用途:将两个文件每一行都粘在一起,[TAB]键隔开,不进行匹配,只复制粘贴
paste [-d] file1 file2
d 后接分隔字符,默认[TAB]
expand
将[TAB]键转换为空格键,可以自定义一个[TAB]键对应多少个字符
expand [-t] file
t 后接数字,默认为8个
unexpand
将空格转换为[Tab]键
unexpand [-at] file
a 转换所有空格
t 后接数字,默认为8个
unexpand [--first-only] file 仅转换开头
切割命令
spilt
将一个大文件依据文件大小或行数来切割成为小文件
spilt [-bl] file PREFIX
b 后接欲切割的单位文件大小,可跟单位,b,k,m等
l 后接欲切割的单位文件行数
PREFIX 代表前导符,表示切割成为的文件名字的前几个字符
例
cd /tmp ; spilt -b 300k /etc/termcap termcap
得到termcapaa,termcapab,termcapac...
切割文件的合并
cd /tmp ; cat termcap* >> termcapbak
参数代换
xargs
用途:分别通过分割(-i)与分批(-n)行为产生某个命令的参数
接收stdin,以指定字符进行分隔,将stdin分成多个arguments
主要用于连接两个非管道命令
xargs [-0edpni] command
0 将stdin中的特殊字符(如`,\等)还原为一般字符
e 后接字符串,表示分析到指定字符串的时候,停止分析(end of file)
d 指定分割字符,而不是默认的空格符
p 执行每个命令,都会询问用户
n 指定每次command使用几个参数
i 不使用i只能传递到最后。使用-i后,可以使用{}指定将参数传递到哪,也可以多个
例
cut -d ‘:‘ -f 1 /etc/passwd | xargs -p -e ‘lp‘ finger
ls logdir/ | xargs -i mv ./logdir/{} ./logdir/{}.bak
关于减号-的用途
用来替代stdin 和stdout
例
tar -cvf - /home | tar -xvf -