cut命令
cut:将一段信息的某一段”切“出来,处理的信息是以行为单位。
参数:
- -d ;后接分隔字符,与-f一起使用;
- -f :依据-d的分隔字符将一段信息切割成为数段,用-f取出第几段的意思;
举例:
以“:”作为分隔,列出第5列
# echo $PATH | cut -d':' -f 5
以“:”作为分隔,列出第3与第5列
# echo $PATH | cut -d':' -f 3,5 /usr/java/jdk/bin:/usr/lib64/qt-3.3/bin
cut缺点:在处理多空格相连的数据时,可能会比较吃力一点。
--------------------------
grep命令
grep:分析一行信息,若其中有匹配的关键字信息,就将该行拿出来。
语法:grep [parameter] [--color=auto] '查找字符串' filename
参数:
- -c:计算找到'查找字符串'所在行的的总数
- -i:忽略大小写的不同
- -n:顺便输出行号
- -v:反向选择,即显示没有'查找字符串'内容的那些行
- --color:可以将找到的关键字部分加颜色显示
ps:如果参数--color=auto不是默认值,每回都需要自行加上这样就很麻烦,此时使用alias命令处理后,可以每次执行grep都会自动帮你加上颜色显示。
步骤:
1.在~/.bashrc内加入一行【alias grep='grep --color=auto'】
2.source ~/.bashrc 让配置文件生效即可
grep的一些高级参数
用法:grep [-A] [-B] --color=auot '搜索字符串' filename
参数:
- -A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来
- -B:后面可加数字,为before的意思,除了列出改行外,前面的n行也列出来
举例:
grep与基础正则表达式的使用
1 --(1)查找特定字符串-- 2 获取查找字符串的前几行或后几行 3 # dmesg | grep -A3 -B1 -color=auto 'ech' 4 tg3 0000:1b:00.1: eth1: Flow control is off for TX and off for RX 5 802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com> 6 All bugs added by David S. Miller <davem@redhat.com> 7 8021q: adding VLAN 0 to HW filter on device eth4 8 Bridge firewalling registered 9 10 查找特定字符串 11 # grep -n 'word' log.txt 12 13 查找不包括特定字符串的内容 14 # grep -v 'word' log.txt 15 16 --(2)利用中括号[]来查找集合字符-- 17 查找字符串test或tast 18 # grep 't[ae]st' log.txt 19 20 查找字符串'ii'前不带字符A的(使用反向选择[^]来完成) 21 # grep '[^A]ii' log.txt 22 23 查找字符串'ii'前没有小写字符的 24 # grep '[^a-z]ii' log.txt 25 26 查找有数字的哪些行 27 # grep '[0-9]' log.txt 28 29 --(3)行首与行尾字符^$-- 30 查找以字符串'hello'开头的行 31 # grep '^hello' log.txt 32 33 查询以大写字符开头的行(会列出包含该字符的一整个字) 34 # grep '^[A-Z]' log.txt 35 36 查找不要开头是英文字母的行 37 # grep '^[^a-zA-Z]' log.txt 38 注意:^符合在字符集合符合(中括号[])之内与之外是不同的,在[]内代表反向选择,在[]之外则代表定位在行首的意义。 39 40 查询行尾结束为小数点(.)的那一行 41 # grep '.$' log.txt 42 注:因为小数点具有其他意义,所有必须用转义字符()来加以解除其特殊意义。 43 44 查找空白行(只有行首和行尾) 45 # grep -n '^$' log.txt 46 47 查找没有空白行与#开头的行 48 # grep -v '^$' log.txt | grep -v '^#' 49 50 --(4)任意一个字符.与重复字符*-- 51 注:这两个符合在正则表达式中的意义如下: 52 --.(小数点):代表一定有一个任意字符的意思 53 --*(星号):代表重复前一个0到无穷多次的意思,为组合形态 54 55 查找字符串iXXa,即共四个字符,其中XX表示随便的意思 56 # grep -n 'i..a' log.txt 57 58 查找至少含有两个ii以上的字符串,需要使用iii* 59 # grep -n 'iii*' log.txt 60 注:"i*"代表空字符或一个i以上的字符(空字符表示没有字符也可以的意思),所有将会输出所有的数据到屏幕上;同理,"ii*",则第一个i一定会存在,但第二个i则是可有可无的多个i,所有凡是含义i,ii,iii等,都会被列出来。 61 62 查找以字符g开头与g结尾的字符串,中间任意字符都可以(".*" 代表0个或多个任意字符的意思) 63 # grep -n 'g.*g' log.txt 64 65 --(5)限制连续字符范围{}-- 66 注意:因为{与}在shell中是有特殊含义的,因此,我们必须要是使用转义字符来让它时区特殊意义才行。{n,m}:连续n到m个的前一个字符 67 68 查找两个i的字符串 69 # grep -n 'i{2}' log.txt 70 71 查找a后面接2个到5个i,后面在接一个a的字符串 72 # grep -n 'a{2,5}a' log.txt 73 74 查找a后面接2个以上i,后面在接一个a的字符串 75 # grep -n 'a{2,}a' log.txt 76 77 查找以a开头的文件(这里需要与通配符【ls -l a*】以a开头的任何文件名的文件区别开来) 78 # ls | grep -n '^a.*'