@文本处理之三剑客的简单使用
文章目录
- 一 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
@文本处理之三剑客的简单使用相关推荐
- C++实现自己的文本转语音程序(简单版)
目录 Text to Audio 1. Preface 2. Requirement 3. Analysis and Implement 4. Sumary and Expectation ...
- cocos label html文本,【cocos2dx】创建简单的文字Label——BMFont
更多参考文章:http://www.cocoachina.com/bbs/read.PHP?tid=217183 http://bbs.9ria.com/thread-420152-1-1.html ...
- 文本语音阅读器——Python简单实现
文本阅读器--Python简单实现 一.功能描述 实现txt文本的自动阅读功能 二.实现流程 1)txt文本准备 将所需要进行语音播放的文本转换为txt文本格式(自行准备或爬取) 2)语音文件生成 利 ...
- 【java文本处理】实现一个简单的小说文本阅读器(分页、翻页、页码跳转)
一.目的 读出文本(.txt)内容显示至dos命令窗: 按规定行数将文本进行分页: 在dos下实现文本翻页.页码跳转等功能,形成简单小说阅读器. 二.主要方法 1. RandomAccessFile类 ...
- 文本相似度计算的简单实例超详细代码解释(附代码,文件)
任务目标 本次实验是根据淘宝搜索的商品标题来寻找类似的商品标题: 给定一个标题:Apple iPhone 8 (A1863) 64GB 深空灰色 移动联通电信4G手机 找出与其类似的前十个标题: 后面 ...
- 计算文本相似度方法大全-简单说(汇总)
原文:https://blog.csdn.net/chinafire525/article/details/78686876 本编文章是方法论-主要给大家介绍原理思路 简单讲解 基于关键词的空间向量模 ...
- python 科大讯飞 文本转语音接口 + QT简单界面
文本转语音 前提 源码 解释 缺陷 打包 由于是实验做的,且有点赶,也就没有怎么整理和疏通,只要能运行就行了.所以仅供借鉴,问题肯定很多,在这只是记录一下所学. 前提 首先你需要注册科大讯飞AI开放平 ...
- 文本生成的几种简单方法
一.使用Chinese GPT2 Model from transformers import BertTokenizer, GPT2LMHeadModel, TextGenerationPipeli ...
- python英文文本词频统计_python实现简单的英文词频统计
1 __author__ = 'Oscar_Yang' 2 #-*- coding= utf-8 -*- 3 #copyRight by OSCAR 4 """ 5 本脚 ...
最新文章
- 【C++】多线程(链式、循环队列)实现生产者消费者模式
- 下一个大计算平台? Amazon Echo 研发幕后全揭露
- python爬虫用到的一些东西
- kibana安装步骤
- 我们的合作伙伴Datawhale两岁啦!
- 海量数据处理分析_BI
- 不显示参数名_Houdini自定义参数Folder的几种模式
- 【算法】LeetCode算法题-Maximum Subarray
- 开源开放 | DeepKE发布新版本:支持低资源、长篇章、多任务的图谱抽取开源框架(浙江大学)...
- vts传感器采取船舶的_详解虎门大桥监测系统:传感器与物联网功不可没
- PHP类分享:session保存到数据库
- 海康8700视频监控OCX控件注册(如无法查看监控)
- 记录阿里云增加二级域名步骤[同三级]
- 大学毕业生推荐表的计算机水平,大学毕业生就业推荐表学校鉴定评语
- Kotlin 异常处理之 Option、Either、Result
- 啥是CTF?新手如何入门CTF?
- 成都拓嘉启远:拼多多开店怎样节约物流成本
- 对化石用计算机模拟修补,浅谈化石的修复和清理(下)
- ssm报错:Invalid bound statement (not found): mapper.UserMapper.findAllUser
- VN Studio环境的搭建