坚持#第246天~sed和awk

作业

10.1作业:将公钥发送到能和本机通信的pc。不能通信发送失败将信息记录

#!/bin/bash

# 将公钥发送到192.168.1.1~192.168.1.10密码是1

[ ! -f/tmp/ip.txt ] && > /tmp/ip.txt

for((i=1;i<=10;i++));do

if [ $(ping -w 2 192.168.1.$i | grep "loss" | cut -d" "-f6) == "0%" ];then

        /usr/bin/expect << ok

        spawnssh-copy-id 192.168.1.$i

        expect"yes/no"

   send"yes\n"

        expect"password"

        send"1\n"

expect eof

ok

else

    echo "192.168.1.$i notalive" >> /tmp/ip.txt

fi

 

1.写点名脚本

略略略

 

2.匹配用户名是三个字符的用户

解:

cat/etc/passwd| cut -d: -f1 | grep -v "-" | grep"\<...\>"

订正:

cat/etc/passwd | cut -d: -f1 | grep "^\<...\>"

 

3.删除每行的倒数第二个字符

解:

:%s#\(.\)\(.$\)#\2#

 

4.显示/boot/grub2/grub.cfg文件中至少一个空白字符开头的行

解:

cat/boot/grub2/grub.cfg | egrep "^[[:space:]]+"

注意grep -E等同于egrep

 

5.删除每行的倒数第一个字符

:%s#\(.\)\(.$\)#\1#

 

6.将square和fair调换位置

square andfair

解:

:%s#squareand fair#fair and square#g

订正:

:%s#(square)(and)(fair)#\3\2\1#

转义后

:%s#\(square\)\(and\)\(fair\)#\3\2\1#

 

 

7.删除每行的第一个单词(纯字母)

解:

:%s#^[a-zA-Z]\{1,\}##g

 

8.删除某文件中以#号开头及后面至少有一个空白字符的行(删除注释(注释后有一个空格))

解:

grep -v"^# " pass.txt

订正:

vim进去

:%s@^#[[:space:]]{1,}@@删不了#

:%s@^#[[:space:]]{1,}\|^#$@@转义之后

 

 

9.删除某文件中开头的不是注释行的#号(开启注释的选项)

解:

:%s@\(^.\{1,\}\)\(#\{1,\}\)@\1@

订正:

:%s@^#([^[:space:]])@\1@不是空格的删掉#,成了,转义后

:%s@^#\([^[:space:]]\)@\1@(保留$1呀)

 

10.显示/etc/vsftpd/vsftpd.conf文件中不是#号开头的行

解:

grep -v"^#" /etc/vsftpd/vsftpd.conf我的终于写对了

grep -v “^[[:space:]]{0,}#”/etc/vsftpd/vsftpd.conf张刚

grep -v “^[[:space:]]{0,}#\|^$”/etc/vsftpd/vsftpd.conf张刚,并删空行

 

11.将倒数第一个字符和倒数第二个字符交换位置

解:

:%s#\(.\)\(.$\)#\2\1#

 

12.判断用户输入的内容是大写字母,还是小写字母,还是数字,还是特殊符号,如何是混合的输出你输入了有什么,例:输入A1,你输入了大写字母,数字

解:

read -p"input:" input

if [[ $input=~ .*[0-9]+.* ]];then  表示.*前面任意.*后面任意

    echo "你输入了数字"

fi

if [[ $input=~ [A-Z]+ ]];then

    echo "你输入了大写字母"

fi

if [[ $input=~ [a-z]+ ]];then

    echo "你输入了小写字母"

fi

if [[ $input=~ [[:punct:]]+ ]];then

    echo "你输入了特殊符号"

fi

订正:

哈哈,特殊符号是[[:punct:]],技高一筹啊组长

 

 

1.使用case实现成绩的优良差的判断

90-100  非常优秀     

80-89    优秀           

70-79    良好             

61-69    还需努力成绩不理想  

60         刚刚及格       

0-59      差         

如果输入的不是数字 提示输入的内容不正确,请重新输入  

输入exit退出,其他不退出

解:

vim case.sh

for((;;));do       死循环while do read....;done

    read -p "input score:" score

    if [[ ! $score =~ ^[0-9]+$ ]];then

        echo "输入的内容不正确,请重新输入"

    else                                                 

        break

    fi

done

case $scorein

9[0-9]|100)

    echo "非常优秀";;

8[0-9])

    echo "优秀";;

7[0-9])

    echo "良好";;

6[1-9])

    echo "还需努力成绩不理想";;

60)

    echo "刚刚及格";;

[0-9]|[1-5][0-9])  注意0~9要单独写,因为是个位数

    echo "差";;

exit)

    exit;;

*)

    echo "输入的范围不正确,请输入0~100"

esac

 

2.vim删除每行的第一个字符

解:

:%s#^.##g

 

3.vim在每行行首添加hello字段

解:

:%s#^#hello#g

 

4.vim将ro或re替换成A

解:

:%s#ro\|re#A#g

 

5.编写初始化脚本

    配置yum源

    安装虚拟机软件

    安装cherrytree

    安装ntfs-3g

    安装stardict

    按q键退出程序

脚本必须有选择菜单

解:

vim/scripts/yumAuto.sh

echo -e"[localyum]\nname=centos7u3\nbaseurl=file:///mnt/centos7u3\ngpgcheck=0\nenabled=1">> /etc/yum.repos.d/localyum.repo

mkdir/scripts

umount/dev/sr0

mount/dev/sr0 /mnt/centos7u3我忘记挂载在哪儿了啊

yum cleanall

yum repolist

 

6.vsftpd nfssamba  脚本必须有选择菜单

 

+:前面的字符出现1次或多次

*:前面的字符出现0次或多次

.:单个任意字符

.*:任意多个字符

?:前面的字符出现0次或1次

\b词首或词尾

|:或,扩展

\|:或,基本

[2346]2 3 46

 

单个字符出现3次或3次以上a{3,}

cat/etc/passwd | grep -E "s{3,}"扩展匹配不需要转义字符

cat/etc/passwd | grep "s\{3,\}"扩展匹配不需要转义字符

匹配数字及大小写字母[0-9a-zA-Z]或字符集:[[:alnum:]]

 

POSIX字符类(字符集啊字符集)
表达式 功能 示例
[:alnum:] 字母和数字 [[:alnum:]]匹配所有字母和数字中的任意一个字符 [a-zA-Z0-9]
[:alpha:] 大小写字母 [[:alpha:]]匹配所有字母中的任意一个字符 [a-zA-Z]
[:lower:] 小写字母 [[:lower:]]匹配所有小写字母中的任意一个字符 [a-z]
[:upper:] 大写字母 [[:upper:]]匹配所有大写字母中的任意一个字符 [A-Z]
[:digit:] 数字 [[:digit:]]匹配0-9数字中的任意一个字符 [0-9]
[:blank:] 空格和制表符 [[:blank:]]
[:space:] 包括换行符,回车等所有空白 [[:space:]]
[:punct:] 特殊符号 [[:punct:]]

 

大写字母:[[:upper:]]

小写字母:[[:lower:]]

 

分组:\(\)  \1

 

数组:decale -a num注意声明数组是-a

num=({a..z})

查看: declare | grep num

 

查看数组下标为13:echo ${num[13]}

 

查看数组里面所有的数值:echo ${num[*]}

 

14.sed?

sed:

流编辑器

可以流动的过程

vim 和 gedit是交互式的

sed是非交互式的

sed [option]‘地址命令’(单引号) 文件名    使用变量和变量替换用双引号””

地址定位:

地址用于决定对那些行进行编辑。数字、正则表达式、

 

语法:

head -5/etc/passwd > /tmp/pass.txt

sed ‘4d’(第四行删掉) /tmp/pass.txt(不会对源文件产生影响)

sed ‘2,4d’(第二行到四行删掉) /tmp/pass.txt(不会对源文件产生影响)

sed ‘2,+2d’(第二行到四行删掉) /tmp/pass.txt(不会对源文件产生影响)

 

sed正则表达式结合

cat/etc/fstab | sed ‘/^#/d’(以#开头的删掉) /tmp/test.txt

这样就不用进入vim里面输入正则操作了

sed ‘/^r/,/^p/p(这个p是打印)’

sed ‘/^root/p’/tmp.pass.txt显示以root开头的那行

但出现了又把全文显示出来了,sed画蛇添足了,怎么办?

关闭模式空间的输出sed -n ‘/^root/p’/tmp.pass.txt就好了

 

sed a   sed i a=o  i=O

跳转到第3行的上面并插入hello

sed ‘3i\hello’/etc/passwd相当于vim里的O=i

sed ‘/daemon/i\hello’/etc/passwd

跳转到第3行的下面并插入hello

sed ‘3a\hello’/etc/passwd相当于vim里的o=a

sed ‘/daemon/a\hello’/etc/passwd

 

支持\n换行

 

覆盖那个行的内容

sed ‘/^root/c\hello’/etc/passwd

 

sed ! sed!

删掉除了第一行和第二行其余所有的行

sed ‘1,2!d’/etc/passwd

 

查找和替换:

vim里面

:s#旧内容#新内容#   这是对光标的那行操作,还可以指定多少行到多少行

:%s#旧内容#新内容#g  这是对全文操作

sed里面

sed ‘s#root#ROOT#’/etc/passwd    没有写小写的g就是对第一个匹配到的换

sed ‘s#root#ROOT#3’/etc/passwd   指定第3次匹配到的换

 

vim/tmp/test

hello like

my love保存退出

like和love替换为liker和lover:

vim里

:%s#\(l..e\)#\1r#   试试sed里面是不是\1:是的,另外,sed里的$1还能用&表示

sed里

sed ‘s#\(l..e\)#\1r#g’/tmp/test   注意sed里面没有%s了,sed不认识%

 

&的用法?

sed's#l..e#&r#' pass.txt等同于sed 's#\(l..e\)#\1r#'pass.txt

 

1.将/etc/passwd中ftp用户的shell换成/bin/bash

指定哪一行:/^ftp/

在那一行做操作:s#/sbin/nologin#/bin/bash#

综合起来就是:sed ‘/^ftp/s#/sbin/nologin#/bin/bash#’

 

2.修改ip地址,将ip改为192.168.2.30

sed '/^IPADDR=/c\IPADDR=192.168.2.30'/etc/sysconfig/network-scripts/ifcfg-ens33巧妙地用了覆盖c\newtext

 

sed ‘/IPADDR/s’是什么意思?

指定哪一行:/IPADDR/

在那一行做操作:s#/sbin/nologin#/bin/bash#

综合起来就是:sed ‘/IPADDR/s#/sbin/nologin#/bin/bash#’

 

指定哪一行:/IPADDR/

在那一行做操作:s#=.*#=192.168.2.30#  老师写的这个还没有我的替换厉害呢

 

3.将selinux默认的enforcing--->disabled

sed'/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

sed ‘/SELINUX/s#enforcing#disabled#’关键词太简单了

 

怎么对源文件生效呢?

-i直接修改源文件

做备份

-i.bak或.txt(自己起的后缀名),改动之后的文件后缀名是源文件;备份的没有动

 

sed ‘5r /etc/issur’ /etc/fstab 将/etc/issur文件中的内容全部添加到/etc/fstab文件的第5行的下面

start:

cat > a.txt << ok

hello

hi

jim

ok

head -5/etc/passwd >> pass.txt

sed ‘加到哪里?1r表示第一行,$r表示最后一行  文件名’  对谁操作

sed ‘1rpass.txt’  pass.txt

优点:可以加到

若不写哪一行,只写r,会每读一行,添加全部内容

 

sed ‘/aaa(符合这个模式的行)w(另存为)  pass.txt/’ /tmp/t2

start:

sed ‘/^hello/w/tmp/aa.txt’ a.txt不存在会直接将/tmp/aa.txt创建出来,有的话就会覆盖

sed ‘/^hello/w    /tmp/aa.txt’    a.txt

                   做了什么动作     对谁操作

 

打印第5行(p: print)

sed -n ‘5p’/etc/passwd

打印第5行的下面一行(n:next)

sed -n ‘5{n;p}’/etc/passwd

 

q:quit

sed ‘5q’/etc/passwd输出前5行就退出

 

打印第一行和最后一行:

sed -n ‘1p;$p’/etc/passwd

 

-r允许使用扩展正则表达式

 

-e允许进行多项编辑,也就是说对同一行做多次处理,也可以做多点编辑-e  "动作1"  -e  "动作2"    ==='动作1;动作2'

sed编辑多个还可以不用-e,直接用分号;隔开:

sed'$s#home#class#;$s#/bin#/sbin#' /etc/passwd将最后一行的home改为class,而且将最后一行的/bin改为/sbin

 

sed -n ‘1p’/etc/passwd

sed -n ‘1p;$p’/etc/passwd

sed -n -r ‘/^\<root\>|^\<user\>/p’/etc/passwd

 

将/etc/passwd文件中第一行的root替换成@@,bin替换成sbin

sed -e'1s#root#@@#g' -e '1s#/bin#/sbin#' /etc/passwd

标注第几行就不用//去找了

或sed  '1s#root#@@#g;1s/bin/sbin/' /etc/passwd

或sed'1{s#root#@@#g;s/bin/sbin/}' /etc/passwd

 

sed'$s#home#class#' /etc/passwd将最后一行的home改为class

 

写sed脚本:脚本内容将所有行的root替换成ROOT,将ftp替换成FTP,并在第10行的下面添加一行hello world内容,在第5行的上面添加一行TOM JACK内容    

解:

sed's#root#ROOT#g' /etc/passwd

sed's#ftp#FTP#g' /etc/passwd

sed'10a\hello world' /etc/passwd

sed '5i\TOMJACK' /etc/passwd

vim sed.txt

将正则表达式的内容全部写到sed脚本里去:

s#root#ROOT#g

s#ftp#FTP#g

10a\helloworld  

5i\TOM JACK

sed -fsed.txt(sed文件脚本名)    /etc/passwd(对其操作)

 

 

 

 

 

15.awk?

awk是行编辑器,对源文件没有影响

在passwd文件的每一行后面都打印一个空行

awk '{print$0"\n"}' /etc/passwd

-F   指定字段分割符

 

统计空白行(一语破地):grep -c "^$"/etc/httpd/conf/httpd.conf

 

清除空行:tr -s "\n"

 

打印passwd文件的奇数行的行号和内容

 awk 'NR%2==1{print NR,$0}' /etc/passwd或cat -n /etc/passwd |awk 'NR%2==1'

注意awk里面最好用单引号,NR代表行号,$0是代表行号后面的内容

 

将每一行带行号打印10次

awk  '{for(i=1;i<=10;i++) {print NR,$0}}'/etc/passwd

 

start:

考点(必考):文本处理工具有什么?

答:grep文本过滤、sed流编辑、awk报告生成器

 

awk可以调整格式排版

 

awk动作用强引号和大括号括起来

awk ‘{print}’pass.txt

$0是整行的内容(默认不写),$0”\n”可以在每行下面增加一行空行

以空格作为分隔符

$1是第一段的内容,$2是第二段的内容

awk ‘{print$1,$2}’ pass.txt  多个参数时两个之间用逗号隔开

 

上面的情况是只有一行内容,一个文档里面有多行内容怎么办呢?

awk ‘{print$1,$2}’ pass.txt第一行第一段、第二段;第二行第一段、第二段

 

打印用户名和uid

:分隔的第一部分和第三部分

awk ‘{print$1}’ /etc/passwd打印了全部,因为没有空格作为分隔符,想使分隔符为:怎么办?

awk -F : ‘{$1,$3}’/etc/passwd

 

输出的时候默认是以空格分隔的,想改变输出的分隔符怎么办?

awk -F : ‘BEGIN{OFS=”$_$”}{print$1,$3}’ /etc/passwd

 

awk -F":/" '{print $2}' /etc/passwd   指定分隔符,并按分隔符去选取第几段

awk -F":|/" '{print $9}' /etc/passwd一起计算:和/

awk -F"" '{print $1,$2,$3}' /etc/passwd没有分隔符按字符

 

awk输出

print

字符串(包括\t)必须用双引号,但是$1,$2等不能用双引号

awk ‘{print “hi”}’b.txt(没有该内容会自动覆盖,和源文件的行一样多)

awk -F: ‘{print$1}’ /etc/passwd

 

awk -F: ‘{print$1,$7}’ b.txt

awk -F:'{print $1"的shell是"$7}' /etc/passwd

 

ifconfig 和awk 取出ip地址(注意都是以空格为分隔符的)

ifconfig ens33 | grep "\<inet\>" | awk '{print $2}'

ifconfigens33 | awk '{print $2}' | head -2 | tail -1

ifconfigens33 | awk '/<inet>/{print $2}'转义后:

ifconfigens33 | awk '/\<inet\>/{print $2}'

 

ifconfigens33 | awk '{print $0"\n"}'每行下面加入空白行

 

printf ----可以格式化输出,默认没有换行
使用格式
printf "format" item1,item2,...itemn
format的指示符
format的指示符都是以“%”开头的,后面跟一个字符:如
%s 表示是字符串
%d 表示十进制整数
%f 表示浮点数
%% 表示%本身
%x 表示十六进制数
%o 表示八进制数
%c 表示字符

 

修饰符:N(数字) 表示显示宽度 %8s 注意:指定字段显示的宽度时>=该字段最长的长度 hello
-:左对齐,默认是右对齐 %8-s(数字后面写-)

没有换行

 

右对齐

 

左对齐

 

可以加字符串@

 

printf总结:
1.与print不同的是,printf需要指定格式
2.格式是用来指定后面的每个item的输出格式
3.printf不会自动打印换行符,需要时手动添加“\n”
4.printf默认没有输出分隔符

 

vim gz.txt

调整格式

没对准,用\t

这个8是啥啊?答:就是隔开几个空格

 

对于浮点数:
%7.2f:其中7表示总的显示宽度(整数位+小数位),2表示小数的位数
%-7.2f:左对齐(数字前面写-)
%.2f:小数位保留两位

 

凡哥作业4

列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可

who | cut -d' ' -f 1 | sort | uniq

最后登录到当前系统的用户的相关信息

last | head-1

小写转为大写

ls  /etc/*.conf | tr -s "a-z""A-Z"

查看密码状态

passwd -Slbx

要求密码的最短使用期限为3天,最长为180天,警告为3天

passwd -n 3-x 180 -w 3 lbx

 

 

作业:

交换机和路由器的关系:

静态路由和动态路由:静态路由自己分配ip地址,动态路由DHCP自动分配ip地址

备份:系统备份(操作系统)、用户备份(文件)

每个用户的每个标识是什么?uid

编程语言、上线、领导

系统管理员:资源管理、性能管理、用户管理、进程管理、监控管理、控制管理

linux系统目录的结构:树形结构

/proc:伪文件系统,系统进程相关信息

负载均衡

 

大后期需要整合出一个万能答案

 

周四考试

周日就业课

下个月压力面试

项目,自我介绍

 

写脚本:vsftpd,匿名可以上传,改配置文件/etc/vsftpd/vsftpd.conf用到sed

解:

vim /scripts/vsftpd.sh

sed -i 's@^#\(anon_upload_enable=YES\)@\1@'/etc/vsftpd/vsftpd.conf

chomod o+w/var/ftp/pub

systemctlrestart vsftpd

 

sed和awk的相同点区别:

sed:对文件内容编辑(可以不写强引号),流编辑,可以用到正则表达式,加-i之后可以直接对源文件进行修改,还能进行原文件备份

awk:动作的部分必须写强引号和大括号,功能大部分是用来输出的,能够以自定的格式来输出,对文本内容进行排版

 

放在awk上面的sed里面:

1.使用sed删除每行的第一个字符

sed 's#^.##'pass.txt

2.使用sed删除每行的倒数一个字符

sed 's#.$##'pass.txt

3.使用sed删除每行的第二个字符

sed's#\(^.\)\(.\)#\1#' pass.txt

4.使用sed删除每行的倒数第二个字符

sed's#\(.\)\(.$\)#\2#' pass.txt

5.使用sed删除/etc/passwd的第8行和第20行

cat -n/etc/passwd | sed '8d;20d'

6.删除/etc/passwd文件中所有的数字

sed's#[0-9]\{1,\}##g' /etc/passwd

 

7.取出/etc/sysconfig/network-scripts/ifcfg-enp3s0文件的上级目录名也就是network-scripts  和绝对路径/etc/sysconfig/network-scripts/

解:

ls/etc/sysconfig/network-scripts/ifcfg-ens33 | awk -F/ '{print $4}'

感悟:.*代表任意个字符,用的很多,记住.*

取到文件的路径就是用ls

ls/etc/sysconfig/network-scripts/ifcfg-ens33 | awk -F/ '{print"/"$2"/"$3"/"$4}'

 

8.在文件/etc/passwd每行的下面添加一行空白行

awk '{print$0"\n"}' /etc/passwd

9.将格式为2017/05/20的日期,替换为2014; 05; 20这样的格式(注意:分号后面有空格)

sed's#/\([0-9]\{2\}\)/#; \1; #' pass.txt

10.将/etc/passwd文件中root用户行打印3行

sed '1!d'/etc/passwd | awk '{print $0"\n"$0"\n"$0}'

 

加上awk-2里面有作业

1.格式化输出用户名、uid、shell 

awk -F:'{printf "%20-s %20-d %20-s\n",$1,$3,$7 }' /etc/passwd

2.将系统所有的组名和组id格式化打印

awk -F:'{printf "%20-s %20-s\n",$1,$3}' /etc/group

3.在2题基础上格式改为 组名 的gid是 gid

awk-F: '{printf "%20-s 的gid是 %20-s\n",$1,$3}' /etc/group
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统的功能模块主要是实现管理员服务端;首页、个人心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值