Linux 文本處理常用工具

文本過濾工具 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
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容