第三周
文本處理工具:
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.www58058.com/64098