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:静默模式,即不输出任何信息;

文本统计工具 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,501评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,673评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,610评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,939评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,668评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,004评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,001评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,173评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,705评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,426评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,656评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,139评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,833评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,247评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,580评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,371评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,621评论 2 380

推荐阅读更多精彩内容