文本過濾工具 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:靜默模式,即不輸出任何信息;
文本統(tǒng)計工具 wc
wc命令 ,統(tǒng)計文本行數,單詞數及文件的字節(jié)數
# 基本用法
wc [OPTION]... [FILE]...
# 常用選項
-l: 統(tǒng)計文件行數
-w:統(tǒng)計文件單詞數
-c: 統(tǒng)計文件字節(jié)數
文本分割工具 cut
按照指定分隔符將文本或標準輸入的行進行分割,并選取指定列
# 基本用法
cut OPTION... [FILE]...
# 常用選項
-d CHAR:以指定的字符為分隔符;
-f FIELDS:挑選出的字段;
#:指定的單個字段, 例如 選取 第 1 個 字段
#-#:連續(xù)的多個字段,例如 選取 第 3-5 個 字段
#,#:離散的多個字段, 例如 選取 第 3,5,7 個 字段
文本排序工具 sort
對文本文件或標準收入的行進行排序
# 基本用法
sort [OPTION]... [FILE]...
# 常用選項
-n:基于數值大小而非字符進行排序;
-t CHAR:指定分隔符;
-k #:用于排序比較的字段;
-r:逆序排序;
-f:忽略字符大小寫
-u:重復的行只保留一份;
復復行:連續(xù)且相同;
文本去重工具 uniq
# 基本用法
uniq [OPTION]... [INPUT [OUTPUT]]
-c:顯示每行的重復次數;
-u:僅顯示未曾重復過的行;
-d:僅顯示重復過的的行;
文本處理綜合實例
1、統(tǒng)計出/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、統(tǒng)計當前連接本機的每個遠程主機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
# 用戶不存在,創(chuàng)建用戶
# sh createuser.sh hadoop
useradd hadoop
# 用戶已經創(chuàng)建,顯示 uid 等用戶信息
# sh createuser.sh hadoop
uid=1001(hadoop) gid=1001(hadoop) 組=1001(hadoop)
5、編寫生成腳本基本格式的腳本,包括作者,聯(lián)系方式,版本,時間,描述等
# 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