Linux 培训8月27日作业
在8月27日的课程上,主要学习了关于grep命令的使用及其在基本正则表达式和扩展正则表达式下各元字符的具体应用.
1.总结本此课程中所涉及命令的使用方法及相关示例展示
本次课程所涉及的命令主要的有
grep它是一个文本过滤工具,它的作用是文本搜索工具,根据用户指定的“模式(pattern)”逐行去搜索目标文本,打印匹配到的行
这里面提到的模式很重要,模式按个人理解想理解它就需要先了解什么是元字符。
元字符:是一组特殊符号,但它们并不表示它们原来的字符意义,而是起到表示通配或控制的功能。
那再回过头来看模式,模式就是一组结合了元字符所达到的一种过滤的条件,比如, grep -i就是说这是一个过滤条件是忽略过滤对象大小写的过滤模式。
个人认为这两个概念很重要,以上是个人理解。
用法展示.
grep [OPTIONS] PATTERN [FILE...]:
选项:
--color=auto:对匹配到的串做高亮显示;
-v:显示模式匹配不到行;
-i: 忽略字符大小写;
-o: 仅显示能够被模式匹配到的串本行;
-q: 静默模式;
-E:使用扩展的正则表达式;
2.总结基本正则表达式及扩展正则表达式
基本正则表达式及其元字符用法
字符匹配:
.: 匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配除了指定范围内的任意单个字符;
[:lower:] 匹配小写字母
[:upper:] 匹配大写字母
[:alpha] 匹配所有字母
[:digit:] 匹配所有数字
[:alnum:] 匹配所有数字字母 [:alpha:]和[:alpha:]和二为一
[:space] 代表空格字符 例如:tab,换行,空格之类的
[:punct:] 代表标点符号
次数匹配:用于要指定其次数的字符的后面;
*: 任意次;
grep "x*y"
\?:0或1次;
grep "x\?y"
\+:1或多次;
\{m\}:精确限制为m次;
\{m,n\}: 至少m次,至多n次,[m,n]
\{0,n\}:至多n次;
\{m,\}:至少m次;
.*: 匹配任意长度的任意字符;
位置锚定:
^: 行首锚定;用于模式的最左侧;
$: 行尾锚定;用于模式的最右侧;
\<, \b: 词首锚定;用于表示单词的模式的左侧;
\>, \b:词尾锚定;用于表示单词的模式的右侧;
^$: 空白行;
分组: \(PATTERN\) "\(ab\)*c" --就是用括号把好几个组合变成一个组
后向引用:\1, \2, ...而后向引用就是比如\1就是引用整个第一个括号内组所表达的意思,\2就是第二个括号正个括号组内表达的意思,以此类推。
或者:
a|b
C|cat: 不表示Cat或cat,而表示C或cat;
要写成(C|c)at
这句理解就是 C是个字符,而cat是个单词,如果写成C|cat 后面跟的是一整个单词
扩展正则表达式的元字符:
字符匹配:
.: 任意单个字符
[]:
[^]:--这是除了模式里的内容的意思
次数匹配:
*
?: 0次或1次;
+: 1次以上;
{m}: 精确匹配m次;
{m,n}: 至少m次,至多n次;
锚定:
^: 锚定行首---这是表式一行
$: 锚定行尾
\<, \b锚定词首---这是表示某个词,指不定在这行的那里。
\>, \b锚定词尾
分组: (PATTERN) "(ab)*c" --扩展和基本很多用法只是头或尾不加\
后向引用:\1, \2,
或者:
a|b
C|cat: 不表示Cat或cat,而表示C或cat;
要写成(C|c)at
3.显示/etc/passwd文件中以bash结尾的行
答: grep --color=auto “\<bash\>$” /etc/passwd
egrep --color=auto “\<bash$\>” /etc/passwd
4. 显示/etc/passwd文件中的两位数或三位数
答:gerp -o --color=auto “\<[[:digit:]]\{2,3\}\>” /etc/passwd
egerp -o –color=auto “\<[[:digit:]]{2,3}\>” /etc/passwd
5. 显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行.
答:netstat –tan | egrep –color=auto “LINSTEN[[:space:]]*$”
6. 添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
答:
useradd bash
useradd testbash
useradd basher
useradd –s /sbin/nologin nologin
egrep --color=auto “^(\<[[:alnum:]]+\>).*\1$” /etc/passwd
grep --color=auto "^\(\<[[:alnum:]]\+\>\).*\1$" /etc/passwd
7. 显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
答:
由于之前差得多,对于管道输送理解并不好,且对于cut命令这种用法也是借鉴和百度查的,其实并不理解 –d: -f这个用法.
而在使用cut时发现如 cut – b /etc/passwd 用法不对,必须cat /etc/passwd | cut –b 3方能有想显示的行或域,理解它是一个对内容选取的命令,而不是目录必须通过cat打开目录内容后才可以查阅。
8.找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
答:
egrep --color=auto "\<[0-9a-zA-Z_]+\>\(\)" /etc/rc.d/init.d/functions
egrep --color=auto "\<[[:alpha:]_]+\>\(\)" /etc/rc.d/init.d/functions
grep --color=auto "\<[[:alpha:]_]\+\>()" /etc/rc.d/init.d/functions
在用到扩展正则表达此题时是借鉴的,因为最初是这样写的 egrep –color=auto “\<[0-9a-zA-Z_]+\>()" /etc/rc.d/init.d/functions但一直表述不正确,借鉴后发现\(\)但一直想不明白括号前的\代表什么,查阅资料说是转义也就是将元字符在正则表达式中的特殊意义消除,()在之前基本正则表达式中就不需消除,难道在基本正则表达式中就不代表特殊意义吗?没想明白.
9、使用echo输出一个路径,而后egrep找出其路径基名要注意基名后面有没有“/”有则去掉;进一步的使用egrep取出其目录名
因前面有落下,借鉴说文件不能以/命名,但用法都自己想的.
答:
echo /etc/rc.d/init.d/functions | egrep -o "[^/]+$"
echo /etc/rc.d/init.d/functions | egrep --color=auto -o "/([^/].+)d"--这个算不算取巧.
10、找出ifconfig命令执行结果中1-255之间的数字
答:
ifconfig | egrep --color=auto -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"