亚马逊品牌网站怎么做,长春seo推广外包,有限公司网址,爬虫网站开发一、文本三剑客是什么#xff1f; 1. 对于接触过Linux操作系统的人来说#xff0c;应该都听过说Linux中的文本三剑客吧#xff0c;即awk、grep、sed#xff0c;也是必须要掌握的Linux命令之一#xff0c;三者都是用来处理文本的#xff0c;但侧重点各不相同#xff0c;a…一、文本三剑客是什么 1. 对于接触过Linux操作系统的人来说应该都听过说Linux中的文本三剑客吧即awk、grep、sed也是必须要掌握的Linux命令之一三者都是用来处理文本的但侧重点各不相同awk功能最强大但也最复杂。 二、文本三剑客介绍
1. grep 特点
使用正则表达式搜索文本匹配到的文本会显示出来并标红使用权限是所有用户
工作方式
grep可以在一个或多个文件中检索如果条件中包含了空格需要使用双引号引起
工作结果
如果搜索成功则返回为0的状态码 否则为1的状态码
格式
grep -参数 条件 文件名参数-i 忽略大小写
-c 统计匹配的行数
-v 取反不显示匹配的行-i
-w 匹配单词
-E 等价于egrep即启用扩展正则表达式
-n 显示行号
-rl 将指定目录内的文件打印
-A数字 匹配行及以下n行
-B数字 匹配行及以上n行
-c数字 匹配行及上下n行
-q 静默模式没有任何内容输出使用$?来判断是否执行成功
-o 只显示匹配的内容
示例
操作对象文件/etc/passwd作用: 记录账户的信息共分为7段使用冒号分割
意义: 账户名:密码代号x: UID:GID: 注释:家目录:登录的Shell
注意: 最后一段/sbin/nologin表述不允许登录# 搜索/etc/passwd 含有root的字符串并显示行号
[rootserver ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin# 搜索/etc/passwd 含有sshd的字符串并显示行号
[rootserver ~]# grep -n sshd /etc/passwd
32:sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin# 匹配/bin/bash的行数显示行号
[rootserver ~]# grep /bin/bash /etc/passwd | wc -l
22# 匹配不是/sbin/nologin的行并显示行号
[rootserver ~]# grep -nv /sbin/nologin /etc/passwd # -n显示行号 -i忽略大小写
[rootserver ~]# grep -ni d /etc/passwd # 匹配含有ftp行及以上3行内容
[rootserver ~]# grep -nB3 ftp /etc/passwd
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
2.sed
介绍 sed命令是将一系列的编辑命令应用于批处理文本的理想工具。sed命令拥有非交互式和高效的特点可以为用户节约大量的时间。本节将介绍sed命令的基础知识。 sed命令是一个非交互式的文本编辑器它可以对来自文本文件以及标准输出的行进行编辑。其中标准输出可以是来自键盘、文件重定向、字符串、变量或者是管道的文本。 sed命令会从文件或者标准输入中一次读取一行数据将其复制到缓冲区然后读取命令行或者脚本的编辑子命令对缓冲区中的文本行进行编辑。重复此过程一直到所有的文本行都处理完毕。 工作原理 模式空间pattern space:sed在内存里开辟模式空间处理文件的每个输入行最多8192字节 保留空间holding space:sed在内存里开辟保留空间保存已经处理过的输入行最多8192字节 原理:sed 的工作流程主要包括读取、执行和显示三个过程 1.读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间pattern space) 2. 执行:默认情况下所有的sed 命令都在模式空间中顺序地执行除非指定了行的地址否则sed 命令 将会在所有的行上依次执行 3.显示:发送修改后的内容到输出流。在发送数据后模式空间将会被清空 重复上述过程直到将文件中所有数据处理完毕 基本语法
sed -参数 [定址符] [操作] 文件名参数
-n--quiet--silent:安静模式不输出模式空间中的内容在一般sed的用法中所有来自STDIN的数据一般都会被列出到屏幕上但如果加上-n参数后则只有经过sed特殊处理的那一行才会被列出来
-i: 直接编辑原文件而不是由屏幕输出默认不对原文件进行操作
-e: 直接在命令行模式上进行sed的动作编辑多个子命令之间也可以用分号隔开如:sed -e command1; command2......filename 或者 sed -e command1 -e command2......filename
-r使用扩展正则表达式F
-f: 直接将sed的动作写在一个文件内-f filename则可以执行filename内的sed动作--help:显示帮助--version:显示版本-{}: 可组合多个命令以分好隔开
定址符 用于使用数字指定处理行区间或者使用正则进行过滤 表示方法 地址定界 作用1,5对文件的1-5行进行处理2,$对文件的2-最后一行进行处理1,3对文件第一行以及以后的第三行内容进行处理1~2对文件的1,3,5,7......的行进行处理/正则表达式/对任何能够被正则表达式匹配带的行进行处理
操作
S: 替换普换指定字符一般搭配正则表达式
d: 删除删除选定的行。
p: 打印如果同时指定行表示打印指定行:如果不指定行则表示打印所有内容:如果有非打印字符则以 ASCII 码输出。其通常与“-n” 选项一起使用。
: 打印行号。
a: 增加a的后面可以接字串而这些字串会在新的一行出现(目前的下一行)
i: 插入i的后面可以接字串而这些字串会在新的一行出现(目前的上一行)
C: 行替换指定行中的所有内容普换成该选项后面的字符串。
y: 字符转换转换前后的字符长度必须相同。
l(小写):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
!: 对指定行以外的所有行应用命令
: 代表匹配到的内容
详细示例
### 切记多加练习
[rootserver ~]# vim sed1.txt[rootserver ~]# sed -n p sed1.txt #打印全文[rootserver ~]# sed -n ;p sed1.txt # 打印全文并显示行号[rootserver ~]# sed -n -e -e p sed1.txt [rootserver ~]# sed -n l sed1.txt #打印控制字符[rootserver ~]# sed -n 1p sed1.txt # 打印第一行[rootserver ~]# sed -n 1p sed1.txt # 不加-n会显示全部加-n只显示处理行
[rootserver ~]#
[rootserver ~]# sed -n 4,6p sed1.txt #打印4-6行
four
five
six[rootserver ~]# sed -n 7,$p sed1.txt # 打印7到最后一行
seven
eight
nine
ten[rootserver ~]# sed -n $p sed1.txt #打印最后一行
ten[rootserver ~]# sed -n 1~2p sed1.txt #打印基数行
one
three
five
seven
nine[rootserver ~]# sed -n 2~2p sed1.txt #打印偶数行
two
four
six
eight
ten
[rootserver ~]# sed -n 4p;6p;8p sed1.txt #打印4,6 8行
four
six
eight[rootserver ~]# sed -n -e 4p -e 6p -e 8p sed1.txt
four
six
eight[rootserver ~]# sed -n 1!p sed1.txt #打印非第一行内容
two
three
four
five
six
seven
eight
nine
ten[rootserver ~]# sed -n 1,5p sed1.txt #打印第一行后的5行
one
two
three
four
five
six[rootserver ~]# sed -n /^f/p sed1.txt #打印f开头的行
four
five[rootserver ~]# sed -n /t/p sed1.txt #检索包含t的行
two
three
eight
ten[rootserver ~]# sed -n /^f/p;/t/p sed1.txt #检索f开头行或者包含t的行
two
three
four
five
eight
ten[rootserver ~]# sed -n 2,/five/p sed1.txt #检索第二行到five所在行
two
three
four
five[rootserver ~]# sed -n /n$/p sed1.txt #检索n结尾的行
seven
ten[rootserver ~]# sed -n n;p sed1.txt #打印偶数行
two
four
six
eight
ten[rootserver ~]# sed -n p;n sed1.txt #打印奇数行
one
three
five
seven
nine[rootserver ~]# sed -n $ sed1.txt #打印行数
10
文本替换
范例文件
[rootserver ~]# cp /etc/passwd ~/ps
[rootserver ~]# ls
公共 视频 文档 音乐 anaconda-ks.cfg ps
模板 图片 下载 桌面 passwd sed1.txt格式
sed 行范围s/旧字符串/新字符串/替换标记 处理文件名 行范围使用数字表示即对第几行到第几行进行替换管理处理若省略则表示进行全文处理 s替换动作 替换标记
1.数字: 使用1-512之间的数字表示指定需要替换的字符串出现第几次才进行替换
2.g: 对数据中所有匹配到的内容进行替换若省略g则只会对第一次匹配的内容进行替换
3.p替换成功立刻打印一般与-n一起使用D:
4.w 文件名:将缓冲区的内容写入到指定文件中
5. : 使用正则表达式匹配的内容进行替换
6.\: 转义符若有特殊符号或路径则需要转义
示例
# 替换root为boot
[rootserver ~]# sed s/root/boot/g ps#将每一行的第一个root替换为admin
[rootserver ~]# sed -n s/root/admin/p ps
admin:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin#将本行第二次出现的root进行替换admin
[rootserver ~]# sed -n s/root/admin/2p ps
root:x:0:0:admin:/root:/bin/bash#将全文所有root进行替换admin并打印
[rootserver ~]# sed -n s/root/admin/gp ps
admin:x:0:0:admin:/admin:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin#将第四行的adm替换为root
[rootserver ~]# sed -n 4s/adm/root/p ps #替换第一个
root:x:3:4:adm:/var/adm:/sbin/nologin
[rootserver ~]# sed -n 4s/adm/root/gp ps #加g全行替换
root:x:3:4:root:/var/root:/sbin/nologin#将行尾的/sbin/nologin替换为/bin/bash 注意/需要转义
[rootserver ~]# sed -n s/\/sbin\/nologin/\/bin\/bash/p ps#注意:上例中替换内容包含路径符号/,可以使用#暂时替代sed命令中的/可改为
[rootserver ~]# sed s#/sbin/nologin#bin/bash#p ps#将最后一行的:替换为
[rootserver ~]# sed -n $s/://gp ps
fox_6x10001000fox_6/home/fox_6/bin/bash#全文注释
[rootserver ~]# sed s/^/#/p ps #指定位置处左侧添加#
[rootserver ~]# sed s/^/#/p ps#检索ssh行在其单词左侧添加一个#
[rootserver ~]# sed -n s/SSH/#/gp ps
sshd:x:74:74:Privilege-separated #SSH:/usr/share/empty.sshd:/sbin/nologin
#右侧添加#
[rootserver ~]# sed -n s/SSH/#/gp ps
sshd:x:74:74:Privilege-separated SSH#:/usr/share/empty.sshd:/sbin/nologin#所有的行首添加及行尾添加
[rootserver ~]# sed -e s/^// -e s/$// ps#在第一行之前插入空白行
[rootserver ~]# sed 1s/^/\n/ ps#最后一行之后插入空白行
[rootserver ~]# sed $s/$/\n/ ps#所有小写改为大写\u表示大写 启用正则
[rootserver ~]# sed s/[a-z]/\u/g ps#所有大写改小写\l(小写l)表示小写字母
[rootserver ~]# sed -i s/[A-Z]/\l/g ps#单词第一个字母大写 \b:表示分匹配单词的边界
[rootserver ~]# sed s/\b[a-z]/\u/g ps
#实战1关闭或者打开selinux
[rootserver ~]# sed -i 22s/disabled/enforcing/ /etc/selinux/config #实战2apache的网页目录修改
[rootserver ~]# yum install httpd -y
[rootserver ~]# sed -i -e 124s/\/var\/www.html/\/zy/ -e 129s/\/var\/www/\/zy/ /etc/httpd/conf/httpd.conf
[rootserver ~]# vim /etc/httpd/conf/httpd.conf
#利用替换实现删除#将全文的root删除
[rootserver ~]# sed -n s/root//gp ps#删除每一行的第一个字符
[rootserver ~]# sed -n s/^.//p ps #.代表任意#删除每一行的最后字符
[rootserver ~]# sed -n s/.$//p ps#删除注释符#
[rootserver ~]# sed -n s/^#//p /etc/sos/sos.conf #删除5-10行的所有数字
[rootserver ~]# sed 5,10s/[0-9]//g ps#删除特殊字符出来数字字母即将结果写入到t1.txt中
[rootserver ~]# sed s/[^(0-9)(a-z)(A-Z)]//gw t1.txt ps
文本删除 注意d操作用于删除文本的特定航会删除指定的所有内容则使用该命令必须特别小心若忘记指定处理行的话会删除所有内容也不会任何输出 示例
示例文件
[rootserver ~]# cp /etc/sos/sos.conf ~/#删除第一行
[rootserver ~]# sed 1d sos.conf #删除2-5行
[rootserver ~]# sed 2,5d sos.conf #删除8-最后一行
[rootserver ~]# sed 8,$d sos.conf #删除最后一行
[rootserver ~]# sed $d sos.conf #使用变量最为行号
[rootserver ~]# num_line1
[rootserver ~]# sed ${num_line}d sos.conf #注意双引号#删除空白行
[rootserver ~]# sed /^$/d sos.conf #删除带[]
[rootserver ~]# sed /\[/d sos.conf [rootserver ~]# sed /root/d ps
插入文本 注意使用a动作在文本最后追加一行使用i动作在指定行前添加一行俩者格式相同 格式
sed 行范围a(或i)\新文本 文件名
示例
[rootserver ~]# sed -i $a\192.168.228.133 www.openlab.com /etc/hosts[rootserver ~]# sed -i 3i\192.168.228.132 www.openlab.com /etc/hosts[rootserver ~]# sed -i /132/i\192.168.228.131 www.openlab.com /etc/hosts#注意sed是基于数据流处理的命令若文本无内容则无法处理座椅空文件无法插入内容
[rootserver ~]# touch t2.txt
[rootserver ~]# sed -i $a\xaio ming 19,98.5 t2.txt
[rootserver ~]# cat t2.txt
3.awk