- 管道命令"|"仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error 并没有直接处理的能力。
[root@www~]# ls -al /etc | less <==想要查看/etc下面的文件,但是同时进行分页显示
- 选取命令 cut 和 grep
- cut
选取信息通常针对"行"来分析的,并不是整篇信息分析。参数 含义 -d 后面接分隔字符,与-f一起使用 -f 依据-d的分隔符将一段信息切割成数段,用-f去取出第几段的意思 -c 以字符的单位取出固定字符区间 [root@www~]# echo $PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games: [root@www~]# echo $PATH | cut -d ':' -f 5 #则上面的意思是,在PATH的结果里面取出以:分隔的第5段 [root@www~]# echo $PATH | cut -d ':' -f 3,5 #则上面的意思是,在PATH的结果里面取出以:分隔的第3段和第5段
[root@www~]#export declare -x HISTSIZE=“1000” declare -x INPUTRC ="/etc/inputrc" declare -x KDEDIR=“/usr” (......省略......) #因为数据排列是整齐的,所以可以直接直接取12个字符后面的字,如果想要取12个字符到20个字符,那么就可以用 cut -c 12-20 [root@www~]#export | cut -c 12- HISTSIZE=“1000” INPUTRC ="/etc/inputrc" KDEDIR=“/usr”
- grep
cut是在一行信息当中取出部分我们想要的,而grep就是分析一行信息,若当中有我们需要的信息,就将该行拿出来。参数 含义 -a 将binary文件以text文件的方式查找数据 -c 计算找到"查找字符串"的次数 -i 忽略大小写的不同 -n 输出行号 -v 反向选择,即显示出没有"查找字符串"内容那一行 –color=auto 可以将找到的关键字部分加上颜色显示
- cut
- 排序命令 sort ,wc,uniq
- sort
sort进行排序,依据不同的数据类型就行排序,文字与数字的排序就不一样。排序的字符与语系编码有关,所以在使用sort之前,可以先使用LANG=Cl来让语系统一。参数 含义 -f 忽略大小写的差异。例如A与a视为编码相同 -b 忽略最前面的空格符 -M 以月份的名字来排序 -n 使用"纯数字"进行排序 -r 反向排序 -u 就是unique,相同的数据,仅出现一行 -t 分隔符,默认用tab来分隔 -k 以那个区间(field)进行排序的意思 [root@www~]# cat /etc/passwd | sort -t ':' -k 3 root:x:0:0:root:/root:/bin/bash uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operatorx:11:0:operator:/root:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin <==按照以:分隔的第三列进行进行排序,又因为是按照第一位进行排序的,所以所有0数字开头的排在前面,1的排在后面 <==如果想要按照第三列的数字大小排序,就用如下命令 [root@www~]# cat /etc/passwd | sort -t ':' -k 3 -n
- wc
参数 含义 -l 仅列出行 -w 仅列出多少字 -m 多少字 [root@www~]# cat /etc/man.config | wc 141 722 4617 <==这个命令代表查出,/etc/man.config里面究竟有多少行、字数、字符数
- uniq
参数 含义 -i 忽略大小写字符的不同 -c 进行计数 [root@www~]# last | cut -d ' ' -f 1 | sort | uniq -c 1 12 reboot 41 root 1 wtmp <==从上面可以看出,reboot有12次,wtmp与第一行的空行是last默认字符。
- sort
- 双向重定向 tee
参数 含义 -a 以累加的方式,将数据加入file中 [root@www~]# last | tee last.list | cut -d " " -f 1 <==这个命令可以把last命令的结果存一份到last.list文件中,同时屏幕中也会有经过cut -d " " -f 1的结果
- 字符转换命令 tr col join paste expand
- tr
tr可以用来删除一段信息当中的文字或者进行文字信息的替换。这个命令也可以用正则表达式的方式替换数据。参数 含义 -d 删除信息当中的SET1字符串 -s 替换掉重复字符串 [root@www~]# last| tr '[a-z]' '[A-Z]' <==将last输出信息中所有小写字符变成大写字符 [root@www~]# cat /etc/passwd | tr -d ':' <==将/etc/passwd中输出信息的冒号删除
- col
参数 含义 -x 将tab键转换为对等的空格键 -b 在文字内有反斜杠时,仅保留反斜杠最后接的那个字符 [root@www~]# cat -A /etc/man.config <==用这个命令查看的时候会看到很多^ [root@www~]# cat /etc/man.config | col -x | cat -A | more <==把tab键替换为空格键,输出美观
- join
join用来处理两个文件之间的数据,要将两个文件当中有相同数据那一行加在一起。参数 含义 -t join默认以空格符分隔数据,并且对比第一个字段数据,如果两个文件相同,则将两条数据连城一行,且第一个字段放在第一个 -i 忽略大小写的差异 -1 代表第一个文件要用哪个字段来分析 -2 代表第二个文件要用哪个字段来分析
注意:在进行合并之前,所处理的文件需要经过排序sort,否则有些对比项会被略过。[root@www~]# head -n 3 /etc/passwd /etc/shadow ==>/etc/passwd<== root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ==>/etc/shadow<== root:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7::: bin:*:14126:0:99999:7::: daemon:*:14126:0:99999:7::: #因为两个内容都是以用户名开头的,且以:为分隔 [root@www~]# join -t ':' /etc/passwd /etc/shadow root:x:0:0:root:/root:/bin/bash:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7::: bin:x:1:1:bin:/bin:/sbin/nologin:*:14126:0:99999:7::: daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:14126:0:99999:7::: <==则通过join,我们把用户名相同的都整合为同一行
- paste
paste就是把两行贴在一起,中间以tab键隔开。参数 含义 -d 后面可以接分隔符,默认以tab来分隔 - 如果file部分写成-,表示来自standard input 的数据的意思 [root@www~]# paste /etc/passwd /etc/shadow root:x:0:0:root:/root:/bin/bash root:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7::: bin:x:1:1:bin:/bin:/sbin/nologin bin:*:14126:0:99999:7::: daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:14126:0:99999:7:::
- tr
- split切割命令
split可以将大文件依据文件大小或行数来切割称为小文件。参数 含义 -b 后面可接欲切割成的文件大小,可加单位b,k,m等 -l 以行数进行切割 PREFIX 代表前导符,可作为切割文件的前导文字 [root@www~]# cd /temp;split -b 300k /etc/termcap termcap [root@www~temp]# ll -k termcap* -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapaa -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapab -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapac #因为我们的前导符是XXX,所以生成的文件就会以XXXaa,XXXab,XXXac
[root@www~]# cat termcap* >> termcapback <==把上面例子的三个文件用数据流重定向定向到同一个文件 [root@www~]# ls -al / | split -l 10 - lsroot <==查看/下面的文件,并且按照每10行进行分割 [root@www~]# wc -l lsroot* 10 lsrootaa 10 lsroot1b 6 lsrootac 26 total #重点在-,一般来说,如果需要stdout/stdin,但是没有文件,只有-,那么-就会被当成stdout或stdin
- 参数代换xargs
xargs可以读入stdin数据,并且以空格符或者断字符进行分辨,将stdin分隔成arguments。
当xargs后面没有接命令的时候,默认以echo进行输出参数 含义 -0 如果输入的stdin含有特殊字符,例如 ,`, -e 是EOF的意思,后面接字符串,当xargs分析到这个字符串时,就会停止工作 -p 在执行每个命令的参数时,都会询问用户的意思 -n 后面接次数,每次command命令执行的时候,要使用几个参数的意思 [root@www~]# cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger Login:root Name:root Directory:/root Shell:/bin/bash Never logged in. No mail No Plan <==finger accout 可以取得该账号的相关说明内容,例如上面的输出就是finger root后的结果。例子中,我们利用cut取出账号名称,用head取出三个账号,最后用xargs将三个账号名称变成finger需要的参数
- 关于减号-的用途
某些命令需要用到文件名来进行处理,该stdin与stdout可以利用减号’-'里替代。[root@www~]# tar -cvf - /home | tar -xvf - #例子中,我们将/home里面的打包文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道,将tar -cvf - /home 传送到后面的tar -xvf -。后面的这个-则取用前一个命令的stdout。
管道
最新推荐文章于 2024-11-18 08:57:40 发布