文章目录

  • 一 grep命令
  • 二 sed命令
  • 三 awk命令
  • 四 expect

三剑客的简单使用


1、grep命令&正则表达式---》过滤2、sed—》非交互式编辑文本3、awk-》格式化有规律的文本

三剑客命令的共性:


​   1、都支持正则表达式​ 2、都支持管道
echo 123 | passwd egon --stdin
4、expect:交互的命令变为非交互

一 grep命令

grep的执行原理

========用法1
grep "root" /etc/passwd# 打开文件,每读一行,都用正则表达式去匹配一下,但凡匹配成功一次,该行就被过滤出来的
root:x:0:0:root:/root:/bin/bashroot========用法2
cat test.txt | grep "root"
ps aux | grep ssh

grep的选项

-n 过滤结果带行号
-q 静默输出
--color
-i 忽略大小写
-A 2 后两行
-B 2 前两行
-C 2 前后两行
-c 统计过滤成功的行数
-v 取反
-w
grep -rl "location" /etc/

正则表达式

案例1

^
$grep -n "^root" /etc/passwd
grep -n "bash$" /etc/passwd

案例2

.    匹配任意一个字符
*    左边那个字符出现0次或无穷次
.*   匹配没有或者所有
.*?  非贪婪匹配(需要配合grep -P选项才可以使用)# 例1
[root@www1 ~]# cat c.txt
abc
a+c
a-c
a1c
aaaaaaaaaaaaaaaac
bbbbbbbbc
cccc
dddd
[root@www1 ~]# grep "a.c" c.txt
abc
a+c
a-c
a1c
aaaaaaaaaaaaaaaac# 例2
[root@www1 ~]# cat d.txt
a
ab
abbcccc
abbbbbbbbbbbbbbbbccc
bbbbbbbbbbbbb
aaaaaaaaaaaaaaaab
[root@www1 ~]#
[root@www1 ~]# grep "ab*" d.txt
a
ab
abbcccc
abbbbbbbbbbbbbbbbccc
aaaaaaaaaaaaaaaab# 例3:
[root@www1 ~]# cat e.txt
a123123213c3123123c
ac
a=-*(0c
cccccca123123c
[root@www1 ~]# grep "a.*c" e.txt
a123123213c3123123c
ac
a=-*(0c
cccccca123123c
[root@www1 ~]# # 例4:
[root@www1 ~]# cat f.txt
<a href="http://www.baidu.com">我是百度</a><a href="http://www.sina.com.cn">新浪</a>
1111
2222
3333
[root@www1 ~]# grep '".*"' f.txt
<a href="http://www.baidu.com">我是百度</a><a href="http://www.sina.com.cn">新浪</a>
[root@www1 ~]# grep -P '".*?"' f.txt
<a href="http://www.baidu.com">我是百度</a><a href="http://www.sina.com.cn">新浪</a>
[root@www1 ~]# grep -oP '".*?"' f.txt
"http://www.baidu.com"
"http://www.sina.com.cn"
[root@www1 ~]# 

案例3

[] 匹配指定范围的任意一个字符[a1cd2]
[0-9]
[a-z]# 例1
[root@www1 ~]# cat h.txt
abc
aBc
a1c
a2c
[root@www1 ~]# grep 'a[a-z]c' h.txt
abc
[root@www1 ~]# grep 'a[A-Z]c' h.txt
aBc
[root@www1 ~]# grep 'a[a-zA-Z]c' h.txt
abc
aBc
[root@www1 ~]# grep 'a[0-9]c' h.txt
a1c
a2c
[root@www1 ~]# # 例2
[root@www1 ~]# cat i.txt
a+c
a-c
a*c
a/c
a1c
a2c
[root@www1 ~]# grep 'a[+-*/]c' i.txt
grep: Invalid range end
[root@www1 ~]# grep 'a[+\-*/]c' i.txt
grep: Invalid range end
[root@www1 ~]# grep 'a[+*/-]c' i.txt
a+c
a-c
a*c
a/c
[root@www1 ~]# # 例3:
[root@www1 ~]# cat i.txt
a+c
a-c
a*c
a/c
a1c
a2c
a!c
[root@www1 ~]# grep 'a[!+*/-]c' i.txt
a+c
a-c
a*c
a/c
a!c
[root@www1 ~]# grep 'a[^!+*/-]c' i.txt
a1c
a2c
[root@www1 ~]#
[root@www1 ~]#

案例4

+ 左边那个字符出现1次或无穷次ab*
ab+# 例1
[root@www1 ~]# cat d.txt
a
ab
abbcccc
abbbbbbbbbbbbbbbbccc
bbbbbbbbbbbbb
aaaaaaaaaaaaaaaab
[root@www1 ~]# grep -n 'ab*' d.txt
1:a
2:ab
3:abbcccc
4:abbbbbbbbbbbbbbbbccc
6:aaaaaaaaaaaaaaaab
[root@www1 ~]# egrep -n 'ab+' d.txt
2:ab
3:abbcccc
4:abbbbbbbbbbbbbbbbccc
6:aaaaaaaaaaaaaaaab
[root@www1 ~]# # 例2
[root@www1 scripts]# cat 14.sh
#!/bin/bashwhile true
doread -p "请输入您的年龄: " ageif [[ $age =~ ^[0-9]+$ ]];thenbreakelseecho "必须输入数字小垃圾"       fi
doneecho "后续代码"
[root@www1 scripts]# chmod +x 14.sh
[root@www1 scripts]# ./14.sh
请输入您的年龄: asdf
必须输入数字小垃圾
请输入您的年龄: asdf
必须输入数字小垃圾
请输入您的年龄: 123
后续代码

二 sed命令

# 场景1:
定位到某一行,然后将该的某一部分给替换掉
sed -r "定位+操作" test.txtsed -r "3s/egon/EGON/gi" test.txt
sed -r "3,5操作" test.txt
sed -r "1操作;3操作" test.txtsed -r "/^[a-zA-Z]/s/egon/EGON/gi" test.txt# 场景2:
定位到某一行,然后删除sed -r "1,3d" new.txt
sed -r "/^[0-9]/d" new.txt# 场景3:
定位到某一行,在改行后添加新的配置
sed -r "1a XXXXXXXXXXXXXXXX" new.txt# 场景4:
定位到某一行,将整行修改掉
sed -r "1c XXXXXXXXXXXXXXXX" new.txt

场景1案例

[root@www1 ~]# cat new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
EgonxxxxdaxegonxxEGONxxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -r '3s/egon/666666/' new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
Egonxxxxdax666666xxEGONxxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -r '3s/egon/666666/i' new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
666666xxxxdaxegonxxEGONxxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -r '3s/egon/666666/gi' new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
666666xxxxdax666666xx666666xxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -ri '3s/egon/666666/gi' new.txt
[root@www1 ~]# vim new.txt

场景1案例

[root@www1 ~]# cat new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
EgonxxxxdaxegonxxEgOnxxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -r '3s/^egon/666/gi' new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
666xxxxdaxegonxxEgOnxxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]#

场景1案例

[root@www1 ~]# cat new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
EgonxxxxdaxegonxxEgOnxxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxxegonxxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -r '3,5s/egon/666/gi' new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
666xxxxdax666xx666xxx
xxxyyyyxx666xxx666xx
xxxzzzxx666xxxxx
xxxhhhhhxxegonxxxxx
[root@www1 ~]# sed -r '3s/egon/666/gi;5s/egon/666/gi' new.txt
xxEgonxxxegonxxxxx
xxx123xxegonxxegonxxx
666xxxxdax666xx666xxx
xxxyyyyxxegonxxxEgOnxx
xxxzzzxx666xxxxx
xxxhhhhhxxegonxxxxx

场景1案例

sed对指定行添加或删除注释  11.txtaaaaa#bbbbbbccccccdddddd
用sed在aaa前加#号注释
sed 's/^/#/' 11.txt    #给所有行前面加入#号用sed在aaa前加#注释 sed 's/^aaa/#&/' 11.txt      # &的意思是匹配任意字符(就是说未知数,啥都行)  替换以aaa开头的行用sed取消bbb前面的注释sed 's/^#\(bbb\)/\1/' 11.txt    #\1的意思 就类似于   前面的 (bbb\) \1就是复制这个位置的内容  如果有 第二个 那么久\2就是复制第二个位置的内容两条命令等同于sed 's/^#bbb/bbb/' 11.txt

三 awk命令

awk -F: '定位{}' 文件路径awk -F: 'NR==3{print $1,$7}' /etc/passwd
awk -F: 'NR>3 && NR<5{print $0}' /etc/passwd
awk -F: 'NR==3 || NR==5{print $1"-"$3}' /etc/passwdawk -F: '/bash$/{print $1}' /etc/passwd

获取ip地址

[root@www1 ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 1.1.1.8  netmask 255.255.255.0  broadcast 1.1.1.255inet6 fe80::20c:29ff:fea2:d75e  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:a2:d7:5e  txqueuelen 1000  (Ethernet)RX packets 51153  bytes 4323126 (4.1 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 59883  bytes 64679002 (61.6 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@www1 ~]# ifconfig eth0 | awk 'NR==2{print $1}'
inet
[root@www1 ~]# ifconfig eth0 | awk 'NR==2{print $2}'
1.1.1.8
[root@www1 ~]# ip=`ifconfig eth0 | awk 'NR==2{print $2}'`
[root@www1 ~]# echo $ip
1.1.1.8
[root@www1 ~]#

四 expect

yum install expect -y
    expect << EOFspawn ssh $user@$ip $cmdexpect {"yes/no" {send "yes\r";exp_continue}"*assword" {send "1\n"}}expect eofEOF

cat > a1.txt << EOF

111

222

333

EOF

[root@www1 scripts]# cat 15.sh
#!/bin/bashexpect << EOFspawn ssh root@1.1.1.2 hostnameexpect {"yes/no" {send "yes\r";exp_continue}"*assword" {send "1\n"}}expect eofEOF
[root@www1 scripts]# chmod +x 15.sh

@文本处理之三剑客的简单使用相关推荐

  1. C++实现自己的文本转语音程序(简单版)

    目录 Text    to    Audio 1. Preface 2. Requirement 3. Analysis and Implement 4. Sumary and Expectation ...

  2. cocos label html文本,【cocos2dx】创建简单的文字Label——BMFont

    更多参考文章:http://www.cocoachina.com/bbs/read.PHP?tid=217183 http://bbs.9ria.com/thread-420152-1-1.html ...

  3. 文本语音阅读器——Python简单实现

    文本阅读器--Python简单实现 一.功能描述 实现txt文本的自动阅读功能 二.实现流程 1)txt文本准备 将所需要进行语音播放的文本转换为txt文本格式(自行准备或爬取) 2)语音文件生成 利 ...

  4. 【java文本处理】实现一个简单的小说文本阅读器(分页、翻页、页码跳转)

    一.目的 读出文本(.txt)内容显示至dos命令窗: 按规定行数将文本进行分页: 在dos下实现文本翻页.页码跳转等功能,形成简单小说阅读器. 二.主要方法 1. RandomAccessFile类 ...

  5. 文本相似度计算的简单实例超详细代码解释(附代码,文件)

    任务目标 本次实验是根据淘宝搜索的商品标题来寻找类似的商品标题: 给定一个标题:Apple iPhone 8 (A1863) 64GB 深空灰色 移动联通电信4G手机 找出与其类似的前十个标题: 后面 ...

  6. 计算文本相似度方法大全-简单说(汇总)

    原文:https://blog.csdn.net/chinafire525/article/details/78686876 本编文章是方法论-主要给大家介绍原理思路 简单讲解 基于关键词的空间向量模 ...

  7. python 科大讯飞 文本转语音接口 + QT简单界面

    文本转语音 前提 源码 解释 缺陷 打包 由于是实验做的,且有点赶,也就没有怎么整理和疏通,只要能运行就行了.所以仅供借鉴,问题肯定很多,在这只是记录一下所学. 前提 首先你需要注册科大讯飞AI开放平 ...

  8. 文本生成的几种简单方法

    一.使用Chinese GPT2 Model from transformers import BertTokenizer, GPT2LMHeadModel, TextGenerationPipeli ...

  9. python英文文本词频统计_python实现简单的英文词频统计

    1 __author__ = 'Oscar_Yang' 2 #-*- coding= utf-8 -*- 3 #copyRight by OSCAR 4 """ 5 本脚 ...

最新文章

  1. 【C++】多线程(链式、循环队列)实现生产者消费者模式
  2. 下一个大计算平台? Amazon Echo 研发幕后全揭露
  3. python爬虫用到的一些东西
  4. kibana安装步骤
  5. 我们的合作伙伴Datawhale两岁啦!
  6. 海量数据处理分析_BI
  7. 不显示参数名_Houdini自定义参数Folder的几种模式
  8. 【算法】LeetCode算法题-Maximum Subarray
  9. 开源开放 | DeepKE发布新版本:支持低资源、长篇章、多任务的图谱抽取开源框架(浙江大学)...
  10. vts传感器采取船舶的_详解虎门大桥监测系统:传感器与物联网功不可没
  11. PHP类分享:session保存到数据库
  12. 海康8700视频监控OCX控件注册(如无法查看监控)
  13. 记录阿里云增加二级域名步骤[同三级]
  14. 大学毕业生推荐表的计算机水平,大学毕业生就业推荐表学校鉴定评语
  15. Kotlin 异常处理之 Option、Either、Result
  16. 啥是CTF?新手如何入门CTF?
  17. 成都拓嘉启远:拼多多开店怎样节约物流成本
  18. 对化石用计算机模拟修补,浅谈化石的修复和清理(下)
  19. ssm报错:Invalid bound statement (not found): mapper.UserMapper.findAllUser
  20. VN Studio环境的搭建

热门文章

  1. OCA/OCP Oracle 数据库12c考试指南读书笔记:第15章: Oracle Storage
  2. Python快速学习第八天
  3. java自动违例设计,java违例
  4. 《机器学习》--概述
  5. STC89C52RC - 11 - 蜂鸣器BEEP
  6. 吉首大学校赛B——干物妹小埋(线段树求最大递增子序列)
  7. 最美的七律却不讲规则
  8. Ubuntu 和 Debian 的关系
  9. Python期末复习题:流程控制
  10. Pandoc 从入门到精通,你也可以学会这一个文本转换利器