1、cat : 查看文件所有内容,并输出到终端 -n : 打印行号
2、more : 分页查看文件,按回车向下翻,空格直接翻页,缺点:只能看一遍,只能从上往下翻。 可配合使用 : man ls | more
3、less : 文本查看工具,可以任意查看,用回车空格都可以翻页查看,/可以进行查找内容,查找到的内容会高亮,按v可进入vim编辑模式,退出vim模式还是返回less 可配合使用 : man ls | less 但是不能按v进入vim编辑模式 g/G : 第一页/最后一页
4、head : 查看文件前n行,不加选项-n默认查看前10行 cat -n passwd | head -n 20 : 查看前20行 cat -n passwd | head -n -10 : 查看除了后10行的剩下n行
5、tail : 查看文件的后n行,不加选项-n默认查看后10行 cat -n passwd | tail -n 11 : 查看后11行 cat -n passwd | tail -n +11 : 查看除了文件前11行的后n行 tail -f /var/log/message : 可以实时查看日志文件的内容 一般用的比较多的是head和tail连用取出中间行的内容
6、grep : 文本行搜索工具,可配合管道|使用 grep root passwd : 查找出含root字符串的行,匹配到的字符串会高亮输出到终端,是从单词中匹配含root的字符串 -w(word) : 通过指定的单词匹配,也叫精确匹配 -i : 不区分大小写查找 -n(number) : 显示匹配到的行号 -o(only-matching) : 只显示匹配到的字符串,一般配合-n使用显示一行内出现了多少个字符串 -c(count) : 匹配成功就把匹配到的行数统计出来 -v : 去掉匹配到的行,打印匹配到关键字之外的行 -An(A:after,n是number) : 打印出匹配到的行的下n行 -Bn(before,n表示number) : 打印出匹配到的行的上n行 -Cn : 打印出匹配到的行的上n行和下n行 -q(quite --silent) : 静默输出,不管配没匹配到,都不输出到终端,一般用于脚本中做判断,配合$?的退出码使用 -r(recursive) : 递归搜索目录,根据文本内容查找目录,for example : grep -nr HISTSIZE /etc : 查找含HISTSIZE字符串的文件, 打印出具体路径和在文件里面的的第几行出现的 注意: 一般比较耗资源,这一条命令一般用的比较多 -l(--files-with-matches) : 一般会配合-r匹配文件,打印匹配到的文件的名字,for example : grep -rl HISTSIZE /etc,直接输出匹配到文件的完整路径 --color=auto : 匹配到的字符串会高亮
BRE(basic regular express)基本正则表达式 : 支持三剑客,用正则表达式时最好加上'',一般各个地方都可以使用,用于处理文本和字符串的 grep '正则表达式' file 注意: 空格不能忽略,不要把^string、string$和\<\>搞混,前者匹配的是行,后者匹配的是单词,想要查到到的内容存在多个,比如或者,就需要用\|区别开,对于egrep直接用|就可以了 ^string : 以string开头的行,有空格就不能过滤出来 string$ : 以string结尾的行 ^$ : 空行 \
[[:space:]]{2}
ERE(Extend Regular Express)扩展正则表达式,支持正则表达式 egrep 或者 grep -E + : 表示+前面的字符出现1-多次 ? : 表示?前面的字符出现0-1次 {m} : 表示前面的字符出现m次 {n,m} : 表示前面的字符出现n到m次 {,m} : 表示前面的字符出现0到m次 {m,} : 表示前面的字符出现m到若干次 exp1 | exp2 : 表示匹配exp1或exp2中的一项,若含有exp1和exp2的字符串则也会匹配出来 tail -f /var/log/messages | egrep -i 'err|warn|den' : 实时显示err或warn或den () : 把整个作为一个整体
7、wc(word count) : 统计行数,单词数,字节数 -l(line) : 只统计行数 -w(word) : 只统计单词数 -c(character) : 只统计字节数
8、awk : 用于空格较多的文件中,默认以空格为分隔符 awk '{print $1}' password : 不区分空格的个数,$0是把为过滤出来的输出,$1是空格分隔符后面的第一个字符 -F(指定分隔符) awk -F ':' '{print $2}' passwd :以冒号为分隔符打印第二列
9、cut(把文件的每行和选项分离出来) -d : 自定义指定分隔符 -f : 指定显示区域的列 -c : 以字符为单位进行分割 cut -d ':' -f 1 password : 以':'为分隔符输出第一列 cut -c 2-5 password : 提取每行第2到第5的字符 cut -c 2,5 password : 只提起第2行和第5行的字符
10、sort(对文本文件的行进行排序,默认是升序排序),配合uniq(11)使用可以查重 注意: sort -t -k 会原样输出数据,而awk和cut会取出指定的分隔符前后的数据 -r : 执行反方向排序,降序 -n : 数字排序,一般和-k配合使用 -r : 降序,从大到小 -t : 指定分隔符 -k : 指定列 -u : 先排序,再合并重复行,和uniq效果一样,直接取消重复行排序,运行不显示 sort -t: -k3 -n password : 以冒号为分隔符指定第三列数字排序,输出的是整个数据,不像cut会分离出来
11、uniq 取出相邻的重复行,一般先进行排序再用uniq -c : 统计相邻重复行出现的次数
12、sed(stream editor,流编辑器),不加-i选项只在内存中运行和修改、替换,不会对源文件进行操作 sed '/需要匹配到的文件/对文件进行怎样的操作' \%regexp%: 任何能够被regexp匹配到的行,换用%(用其他字符也可以,如:#)为边界符号,是为了防止/regex/的斜杠被使用了,匹配起来有些麻烦 for example : (1)sed -r/-E -n '\@^r@Ip' password = sed -r/-E -n '/^r/Ip' password = sed -r/-E -n '\%^r% Ip' password 常用编辑命令 1)p:打印模式空间中的内容 ,选项加-n 2)d:删除匹配到的行 3)a \text:append,表示在匹配到的行之后追加内容 4)i \text:insert,表示在匹配到的行之前追加内容 5)c \text:change,表示把匹配到的行和给定的文本进行交换 6)s/regexp/replacement/flages:查找替换,把text替换为 regexp匹配到的内容(其中/可以用其他字符代替,例如@) 其他编辑命令: g:全局替换,默认只替换第一个 i: 不区分大小写 p:如果成功替换则打印 -n(--quite,--silent) : 静默输出,一般和p配合使用,和grep -q作用大同小异,配合p也是输出已经进行操作后匹配到的行 -r(regexp-extended) : 支持扩展正则表达式 -E : 与-r一样 -i : 修改文件内容 sed -r/-E -n '/^r/Ip' password : /接的正则表达式/,I(大写的i,表示忽略大小写),p(print,打印出来),匹配password中以r开头并忽略大小写r的行 ###地址定界: sed -n -r '3,+4 p' passwd : 打印第3行和第3行下面的4行 sed '2 s(search)/root/huawei/' password : 2表示第2行,把第2行的第一个root替换成huawei,替换成功会输出所有的数据,包括已经替换成功的 sed -n '2 s(search)/root/huawei/pI' password : I(大写的i)忽略大小写,表示不区分大小写匹配,把root替换成huawei,打印出来,打印的是匹配到的行,Root也能匹配到 sed -n '2 s(search)/root/huawei/Igp' password : g是global表示全局的,I(大写的i)忽略大小写,把第二行中所有匹配到的不区分大小写输出 sed -n '$ s/root/huawei/p' passwd : 把最后一行的root替换成huawei,并打印出来结果 sed -n '/root/p' passwd | cat -n : 把含有字符root的行打印出来,并显示行号 sed '1,5d' passwd : 删除1到5行 sed -n 5p passwd : 打印第5行 sed -n '$p' passwd : 打印最后一行,包括空行 sed -n '2a(append) \huawei' passwd : 在第二行下面另起一行,加huawei内容 sed -n '2i(insert) \huawei' passwd : 在第二行上面另起一行,加huawei内容 sed -n '2c(change) \huawei' passwd : 把第二行替换成huawei sed -n '1,5p' passwd : 打印第1到第5行 sed -i.bar '1,5d' passwd : 拷贝为.bar文件并删除1,5行改变源文件,注意.bar文件没有被改变 sed 's/root/huawei/g' passwd : 把每一行所有的root替换成huawei sed 's/root/huawei/' passwd : 替换每行的第一个匹配的root为huawei 用替换可以删除内容(不是删除行) sed 's/root//' passwd : 删除所有行的第一个root sed 's/root//g' passwd : 删除所有行的root sed -n '1 s/root//2p' passwd : 删除第1行的第2个root sed 's/^/#/' passwd : 每行开始加注释,^表示以空开头 sed 's/^.//' passwd : 删除每行的第一个字母
grep awk sed 三剑客 grep擅长查找功能,sed擅长取行和替换。awk擅长取列。
参考文章
发表评论