Linux自学笔记——grep文本处理工具及wc,cut,sort,uniq命令

  1. 云栖社区>
  2. 博客>
  3. 正文

Linux自学笔记——grep文本处理工具及wc,cut,sort,uniq命令

技术小阿哥 2017-11-27 11:36:00 浏览702
展开阅读全文

wc命令:
wc [option]… [file]…
-l:lines
-w:words
-c:characters
Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
cut命令:
cut [options]…[file]…
-d DELIMETER:指明分隔符;
-f FILEDS:
#:第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续多个字段,例如1-6
混合使用:1-3,7
--output-delimiter=STRING:指定以什么字符串输出;
Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
sort命令:
sort [option]…[file]…
-f:忽略大小写
-r:逆序
-t DELIMETER:字段分隔符;
-k #:以指定的字段为标准排序;
-n:以数值大小进行排序
-u:uniq,排序后去重;
Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
uniq命令:
uniq [option]…[file]…
-c:显示每行重复出现的次数;
-d:仅显示重复过的行;
-u:仅显示不曾重复的行;
Note:连续且完全相同方为重复;
Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
练习:以冒号为分隔,取出/etc/passwd文件的第6行至第10行,并将这些信息按第3个字段的数值大小进行排序,最后显示的各自的第1字段;
Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令

grep:
linux 上文本处理三剑客
grep:文本过滤(模式:pattern)工具;
sed:stream editor,文件编辑工具;
awk:linux上的实现gawk,文本报告生成器;
grep:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件;
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep –E ,egrep
正则表达式引擎
grep [OPTIONS] PATTERN [FILE…]
选项:
--color=auto:对匹配到的文本着色显示;
-v:显示不能够被pattern匹配到的行;
-i:忽略字符大小写;
-o:仅显示匹配到的字符串;
-q:静默模式,不输出任何信息;
-A #:after,后#行
-B #:before,前#行
-C #:context,前后各#行

    -E:使用ERE

基本正则表达式元字符:
字符匹配:
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符
[:digit:] [;lower:] [;upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的字数;
:匹配前面的字符任意次;
.
:任意长度的任意字符;
\?:匹配其前面的字符0或者1次;即前面的可有可无;
+:匹配其前面的字符至少一次;
{m}:匹配前面的字符m次;
{m,n}:撇批前面的字符至少m次,至多n次;
{0,n}:匹配前面的字符至多n次;
{m,}:匹配前面的字符至少m次
位置锚定:
^:行首锚定;用户模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于匹配模式整行;
^$:空行;
^[[:space:]]$:空行;
\< 或 \b:词首锚定;用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN>\>:匹配整个单词;
分组:
():将一个或多个字符捆绑在一起,当作一个整体进行处理;
(xy)
ab
Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符:
(ab+(xy)):
\1:ab+(xy)

\2:xy
后向引用:引用前面的分组括号中的模式所匹配的字符,(而非模式本身)
练习:

  1. 显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  2. 显示/etc/passwd文件中不以/bin/bash结尾的行;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  3. 显示/etc/passwd文件中ID号最大的用户的用户名;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  4. 如果用户root存在,显示其默认的shell程序;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  5. 找出/etc/passwd中的两位或三位数;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  6. 显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  7. 找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  8. 添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令

egrep及扩展的正则表达式
egrep = grep –E
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符
[]:匹配范围内的任意单个字符
[^]:匹配范围外的任意单个字符;
次数匹配:
*:匹配前面的字符任意次;
?:0次或1次;
+:1次或多次;
{m}:m次;
{m,n}:至少m次,至多n次;
锚定:
^:行首;
$:行尾;
\<,\b:词首;
\>,\b:词尾;
分组;
():
后向引用:\1,\2,…
或者:
a|b
c|Cat:c或者Cat

  1. 显示当前系统root、centos或user1用户的默认shell和UID;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  2. 找出/etc/rc.d/init.d/functions文件(centos6)中某单词后面跟一个小括号的行;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  3. 使用echo输出一绝对路径,使用egrep取出其基名;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
    进一步地:使用egrep取出路径的目录名,类似于dirname命令的结果;
  4. 找出ifconfig命令结果中1-255之间的数值;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令
  5. 找出ifconfig命令结果中的IP地址;
    Linux自学笔记grep文本处理工具及wc,cut,sort,uniq命令

本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/2052156,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注