三剑客的使用

1.bash是一个命令处理器,运行在文本窗口中,并能执行用户直接输入命令

2.bash能够从文件中读取linux的命令。(脚本)

3.bash支持通配符,管道,替换,条件判断等

比较简单一点的比如

echo  jjy  jjy  jjy
echo   jjy{1..100}
mkdir  jjy{1..100}.txt        
#创建jjy1.txt  jjy2.txt  jjy3.txt   jjy4.txt  .......
mkdir  jjy{a..z}.txt

或者做一个基数的输出:

echo  jjy{1..100..2}
#每两个做一个输出:jjy1 jjy3 jjy5 jjy7 jjy9 ...............

别名

输入:alias可查看别名

unalias +命令 取消别名

比如可以给危险的命令rm设置一个别名

alias rm='echo 别瞎用rm'
alias   #查看是否设置成功
可以使用rm进行使用

查看历史命令

history
!+ 行号     #调用这行的命令
!!         #调用上一次的命令

linux的正则表达式

正则表达式的意义:

处理大量的字符串

处理文本

通过特殊符号的辅助,可以让linux管理员快速过滤,替换,处理所需要的祖父穿

linux三剑客

grep:文本过滤工具

sed:文本编辑器

awk:linux文本报告生成器

正则表达式的分类:

基本正则表达式:

^ $ . [] *

扩展正则表达式:

(){} ? |

微信截图_20230721101532.png微信截图_20230721101611.pnggrep命令

语法:grep 参数 匹配模式 文件数据

常用参数:

-i 忽略大小写

-o 仅显示匹配到的字符串本身

-v 显示不匹配的行

-E 支持使用扩展的正则表达式

-q 不输出

举例:
cat /etc/passwd  >  jj.txt
grep -i "root" jj.txt              #过滤出含有root的行
grep -i -n "root" jj.txt           #-n 可以显示行数
grep -i -n "root" jj.txt -c        #-c统计多少行
grep '^$' jj.txt -n -v             #-v反转参数,^$显示空行  这行命令意思:显示出了空行以外的所有内容
#^的用法
grep -i -n "^root" jj.txt        #过滤出以root开头的并且显示行号
#$符

grep -n "\.$" jj.txt          #过滤出以.结束的行并显示行号,因为.是一个表达符所以加\
grep -n "o$" jj.txt           #过滤出以o结束的行并显示行号
#[]符

grep -n "^[a-c]" jj.txt         #过滤出以a-c开头的
grep -n "^[a-c]" jj.txt -v      #不显示以a-c开头的
find / -name "*.txt" | grep -E "a|c" #找出所有以txt结尾的文件 并且过滤出含有 a和c的

sed命令

sed是操作,过滤和转文本内容的强大工具

-n #取消默认sed的输出,常与sed内置命令-p一起使用

-i #直接将修改结果写入文件

-e #多次编辑

-r #支持正则

微信截图_20230721101904.png案例:

cat jjy.txt

jjy qq  wx 
asd 111 222
qwe 333 444
zxc 555 666
777 888 999
sed -n "2,3p" jjy.txt             #打印第二行和第三行的输出 p 打印 -n取消本来的内容输出
asd 111 222
qwe 333 444


sed "2,+3p" jjy.txt -n            #打印第二行和第二行的后三行 +3p是打印第二行的后三行
asd 111 222
qwe 333 444
zxc 555 666
777 888 999


sed "/zxc/p" jjy.txt -n           #打印出含有zxc的行(如果要打印含有什么的行用/单词/)


sed "/222/d" jjy.txt -i           #将匹配到222的字符进行删除(d是删除)如果不加i就不会将文本里的删除


sed '5,10d' jjy,txt -i            #删除第5行到第10行


sed 's/888/111/g' jjy.txt -i      #将文件中是888的替换成111 (-i保存)


sed -e "s/jjy/my/g" -e "s/777/222/g" jjy.txt -i   #-e多次编辑 将文件中jjy替换成my,777替换成222 -i保存


sed "2a jjyjjyjjy jjy" jjy.txt -i       #在第二行后添加jjyjjyjjy jjy也就是第三行


sed "5i asdasdasd" jjy.txt -i          #在第5行前添加asdasdasd并保存


sed "3i jjyjjyjjy \nzzzzzzz" jjy.txt -i   #在第三行前添加两行一行是jjy… 一行是zzzzz \n后面不用空格


sed "a -----------" jjy.txt -i         #a是每一行(在每一行后面添加--------------)
#案例
ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.11  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 fe80::20c:29ff:fec4:4fdd  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:4f:dd  txqueuelen 1000  (Ethernet)
        RX packets 375690  bytes 559051502 (533.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17436  bytes 1904142 (1.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


#如果只要取出ip192.168.11.11使用:
ifconfig eth0 | sed "2p" -n | sed "s/^.*inet//" | sed "s/net.*$//"
# "s/^.*inet//"  是将init之前不管多少字符都替换成//(空)
# "s/net.*$//"   是将net后不管多少字符替换成//(空)

awk命令

#awk的语法

#awk [可选参数] ‘模式 {动作}‘ 文件

#动作一般是:print和printf

cat 123.txt
jjy qq  wx 
asd 111 222
qwe 333 444
zxc 555 666
777 888 999
awk '{print $1}' 123.txt      #打印第一行
awk '{print $1,$2}' 123.txt   #打印第一行和第二行

#awk默认以空格为分隔符,多个空格也识别为一个空格

微信截图_20230721102058.png1

awk '{print "第一列:"$1,"第二列:"$2}' 123.txt
#打印第一行和第二行并且在前面加 第一列 第二列,添加相应的内容需要 ”“
#NR在awk中表示行号,NR==5就表示行号是5的那一行

#一个=是修改变量值的意思,两个=是关系运算符,就是等于的意思

awk 'NR==5{print $0}' 123.txt
#使用awk输出123.txt,然后找到第5行的内容(NR==5就是找到第5行),并且打印他的所有

awk 'NR==3,NR==5{print $0}' 123.txt
#打印第三行到第5行
组合使用:

cat 123.txt
jjy qq  wx 
asd 111 222
qwe 333 444
zxc 555 666
777 888 999

awk 'NR==2{print "我是第二行的第三列:"$3}' 123.txt
输出:我是第二行的第三列:222
#意思:NR==2(显示第二行)  "我是第二行的第三列:"   自定义的字,$3第三列


awk 'NR==3,NR==5{print NR,$0}' 123.txt
#其中 NR就是会显示行号
NF显示有多少字节

awk '{print $1,NF}' 123.txt
jjy 3
asd 3
qwe 3
zxc 3
777 3
#意思就是打印第一行并且显示一共有多少字段
awk '{print $(NF-1)}' 123.txt
#打印倒数第二列,$(NF-1)NF代表字节数 -1就是倒数第二列 -0就是倒数第一列

awk '{print $(NF-1),$(NF-0)}' 123.txt
#打印出倒数第一列和倒数第二列