第三周
文本处理工具:
linux上文本处理三剑客:
grep、egrep、fgrep:文本过滤工具(模式pattern)工具
grep:基本正则表达式 -E -F
egrep:扩展正则表达式,-G -F
fgrep:不支持正则表达式,
sed:stream editor,流编辑器;文本编辑工具;
awk:LINux的实现为gawk,文本报告生成器(格式化文本)
正则表达式:
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制和通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符:\(hello[[:space:]]\+|)|+
grep:Global serch REgular expression and print out the line.
作用:文本搜索工具、根据用户指定的模式”(过滤条件)“
对目标文件逐行进行匹配坚持;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写的过滤条件
正则表达式引擎;
grep [OPTIONS] PATTERN [FILE…](同时处理多个file)
grep [OPTIONS] [-e PATTERN] | -f FILE [FILE…]
常用OPTIONS:
–color=auto:对匹配到的文本着色高亮显示;
-i:ignorecase,忽略字符大小写;(默认情况是区分大小写)
-o:仅显示匹配到的字符串本身;
-v:–inver-match:显示不能被模式匹配到的行
-E:支持使用扩展的正则表达式(元字符)
-F:搜索
-q:–quiet,–silent:
例如#grep "UUID" /etc/fstab
-A#;after,后#行
-B#;bifore,前#行
-C#:context,前后各# 行
基本正则表达式元字符:
字符匹配:
.:匹配任意单个字符;
例如:grep “r..t” /etc/passwd
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:digit:]
[:lower:]
[:upper:]
[:alpha:]
[:alnum:]
[:punct:]
[:space:]
匹配次数:
用在指定其出现的次数的字符的后面,用于限制其前面字符
出现的次数;
*(仅表现次数):匹配其前面的字符任意次:0,1,多次;
例如: grep “x*y” 表示前面的x可以出现0,1,或者多次
.*:匹配任意长度的任意字符
例如 grep "r.*"
\?:匹配其前面的字符0次或1此,即前面字符可有可无
\+:匹配其前面字符1次或多次;即前面的富足出现至少1次
\{m\}:只匹配其前面字符m次。
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}\:至少m次
位置锚定:
^:行首锚定;用于模式的最左侧;
grep "^root" /etc/passwd
$:行尾锚定;用于模式的最右侧;
grep "root$" /etc/passwd
^PATTERN$:用于pattern匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
单词:非特殊字符组成的联系字符串都称为单词;
\<或\b:词首锚定
例如grep "\<root" /etc/passwd 用于匹配root出现在整个单词的最左侧(针对一个单词)
\>或\b:词尾锚地,用于单词模式的右侧
例如grep "root\>" /etc/passwd
用于匹配root整个单词的词尾也就是最右边(针对一个单词来说)
\<PATTERN\>:匹配完整的单词
1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
who |cut -d' ' -f1|uniq
2、取出最后登录到当前系统的用户的相关信息。
# who |tail -1 |cut -d ' ' -f1|id
uid=0(root) gid=0(root) 组=0(root)
3、取出当前系统上被用户当作其默认shell的最多的那个shell。
# cut -d':' -f7 /etc/passwd |sort |uniq -c |sort -n |tail -1 |cut -d' ' -f7
# cut -d':' -f7 /etc/passwd |sort |uniq -c |sort -n |tail -1 |awk -F' ' '{print $2}'
4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
# sort -nt':' -k3 /etc/passwd |tail |tr 'a-z' 'A-Z' >/tmp/maxusers.txt
5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
CentOS 7:
# ifconfig |head -2|tail -1|awk -F' ' '{print $2}'
CentOS 6:
# ifconfig |head -2|tail -1 |cut -d':' -f2 |cut -d' ' -f1
6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
# ls /etc/*.conf |cut -d'/' -f 3 |tr 'a-z' 'A-Z' >/tmp/etc.con
7、显示/var目录下一级子目录或文件的总个数。
# ls /var/ |wc -l
8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
# sort -nt':' -k3 /etc/group |head |cut -d':' -f1
9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
# cat /etc/fstab /etc/issue > /tmp/etc.test
10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
(1)、创建组distro,其GID为2016;
# groupadd -g 2016 distro
(2)、创建用户mandriva, 其ID号为1005;基本组为distro;
# useradd -g distro -u 1005 mandriva
(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
# useradd -u 1100 -d /home/linux mageia
(4)、给用户mageia添加密码,密码为mageedu;
# echo magedu |passwd –stdin mageia
# echo -e "magedu\nmagedu" |passwd mageia
(5)、删除mandriva,但保留其家目录;
# userdel mandriva
(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
# groupadd peguin
# useradd -u 2002 -g distro -G peguin slackware
(7)、修改slackware的默认shell为/bin/tcsh;
# usermod -s /bin/tcsh slackware
(8)、为用户slackware新增附加组admins;
# groupadd admins
# usermod -aG admins slackware
(9)、为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天;
# echo "magedu" |passwd –stdin slackware
# chage -m 3 -M 180 -W 3 slackware
(10)、添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova;
# groupadd nova
# groupadd clouds
# useradd -u 3003 -g clouds -G peguin,nova openstack
(11)、添加系统用户mysql,要求其shell为/sbin/nologin;
]# useradd -r -s /sbin/nologin mysql
(12)、使用echo命令,非交互式为openstack添加密码。
# echo -e "magedu\nmagedu" |passwd openstack
原创文章,作者:Version,如若转载,请注明出处:http://www.178linux.com/64098