文本过滤工具 grep
grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;
- grep:基于基本正则表达式进行文本过滤
- egrep:基于扩展正则表达式, 功能类似于 grep -E
- fgrep:不支持正则表达式,功能类似于 grep -F
# 基本用法
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
# 常用选项 OPTIONS:
--color=auto:对匹配到的文本着色后高亮显示;
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v, --invert-match:显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式元字符;
-q, --quiet, --silent:静默模式,即不输出任何信息;
文本统计工具 wc
wc命令 ,统计文本行数,单词数及文件的字节数
# 基本用法
wc [OPTION]... [FILE]...
# 常用选项
-l: 统计文件行数
-w:统计文件单词数
-c: 统计文件字节数
文本分割工具 cut
按照指定分隔符将文本或标准输入的行进行分割,并选取指定列
# 基本用法
cut OPTION... [FILE]...
# 常用选项
-d CHAR:以指定的字符为分隔符;
-f FIELDS:挑选出的字段;
#:指定的单个字段, 例如 选取 第 1 个 字段
#-#:连续的多个字段,例如 选取 第 3-5 个 字段
#,#:离散的多个字段, 例如 选取 第 3,5,7 个 字段
文本排序工具 sort
对文本文件或标准收入的行进行排序
# 基本用法
sort [OPTION]... [FILE]...
# 常用选项
-n:基于数值大小而非字符进行排序;
-t CHAR:指定分隔符;
-k #:用于排序比较的字段;
-r:逆序排序;
-f:忽略字符大小写
-u:重复的行只保留一份;
复复行:连续且相同;
文本去重工具 uniq
# 基本用法
uniq [OPTION]... [INPUT [OUTPUT]]
-c:显示每行的重复次数;
-u:仅显示未曾重复过的行;
-d:仅显示重复过的的行;
文本处理综合实例
1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来
# /etc/passwd文件中其默认shell为非/sbin/nologin的用户
# grep -v "/sbin/nologin$" /etc/passwd | cut -d : -f 1
root
sync
shutdown
halt
elastic
# /etc/passwd文件中其默认shell为非/sbin/nologin的用户个数
# grep -v "/sbin/nologin$" /etc/passwd | wc -l
5
2、查出用户UID最大值的用户名、UID及shell类型
# 先取出 用户名、UID及shell类型
# cat /etc/passwd | cut -d : -f 1,3,7
root:0:/bin/bash
bin:1:/sbin/nologin
daemon:2:/sbin/nologin
adm:3:/sbin/nologin
lp:4:/sbin/nologin
sync:5:/bin/sync
shutdown:6:/sbin/shutdown
halt:7:/sbin/halt
mail:8:/sbin/nologin
operator:11:/sbin/nologin
games:12:/sbin/nologin
ftp:14:/sbin/nologin
nobody:99:/sbin/nologin
systemd-network:192:/sbin/nologin
dbus:81:/sbin/nologin
polkitd:999:/sbin/nologin
sshd:74:/sbin/nologin
postfix:89:/sbin/nologin
ntp:38:/sbin/nologin
elastic:1000:/bin/bash
# 按 UID 排序
# cat /etc/passwd | cut -d : -f 1,3,7 | sort -k 2 -t : -n
root:0:/bin/bash
bin:1:/sbin/nologin
daemon:2:/sbin/nologin
adm:3:/sbin/nologin
lp:4:/sbin/nologin
sync:5:/bin/sync
shutdown:6:/sbin/shutdown
halt:7:/sbin/halt
mail:8:/sbin/nologin
operator:11:/sbin/nologin
games:12:/sbin/nologin
ftp:14:/sbin/nologin
ntp:38:/sbin/nologin
sshd:74:/sbin/nologin
dbus:81:/sbin/nologin
postfix:89:/sbin/nologin
nobody:99:/sbin/nologin
systemd-network:192:/sbin/nologin
polkitd:999:/sbin/nologin
elastic:1000:/bin/bash
# 按 UID 排序,取最后一个既为UID最大的用户
# cat /etc/passwd | cut -d : -f 1,3,7 | sort -k 2 -t : -n | tail -n 1
elastic:1000:/bin/bash
3、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
# netstat -atn | awk '{print $5}' | awk '{print $1}' | uniq -c | sort -nr
2 0.0.0.0:*
2 :::*
1 and
1 Address
1 192.168.172.1:55987
4、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果 指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等 信息
# cat createuser.sh
#!/bin/bash
SCRIPT=$(basename $0)
function usage(){
echo -e "\nUSAGE: $SCRIPT username \n"
exit 1
}
if [ $# -ne 1 ] ; then
usage
fi
user=$1
id ${user} > /dev/null 2>&1
if [ $? -ne 0 ] ; then
useradd ${user}
echo "useradd ${user}"
else
id ${user}
fi
# 用户不存在,创建用户
# sh createuser.sh hadoop
useradd hadoop
# 用户已经创建,显示 uid 等用户信息
# sh createuser.sh hadoop
uid=1001(hadoop) gid=1001(hadoop) 组=1001(hadoop)
5、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
# cat script_generator.sh
#!/bin/bash
SCRIPT=$(basename $0)
function usage(){
echo -e "\nUSAGE: $SCRIPT script_name \n"
exit 1
}
if [ $# -ne 1 ] ; then
usage
fi
script_name=$1
now_date=$(date +%F)
tee ${script_name} <<EOF
#!/bin/bash
# description:
# version: 0.0.1
# author: admin <admin@demo.com>
# date: ${now_date}
EOF
# 生成 test_script.sh 脚本
# sh script_generator.sh test_script.sh
#!/bin/bash
# description:
# version: 0.0.1
# author: admin <admin@demo.com>
# date: 2019-12-21