切记:seq命令用于产生从某个数到另外一个数之间的所有整数。sed才是处理文本的命令

在遇到扩展符号时,需要添加特定参数,| () +[] 为扩展符号时,必须添加参数

egrep/grep -E   sed -r

windows和linux互传文件,yum install lrzsz -y,直接拖拽就行了

空行的表达式:'/^$/'

  • grep命令  可以使用单引号或者双引号

-v     --取反

$      --结尾

^      --开头

查看文件中非注释的信息

  1. grep -v "^#" qq.txt

通过 ip address s ens33获取到ip地址,因为你使用扩展符号,所以要用egrep

  1. ip address s ens33 | egrep "([0-9]+\.){3}[0-9]+"

  1. #获取单行ip地址
    ip address s ens33|egrep "([0-9]+\.){3}[0-9]+" -o|head -1

批量创建用户

  1. echo syscal{01..10} | xargs -n1 | sed -r 's#(.*)#useradd \1#g'|bash

批量创建用户并设置初始密码为123456

  1. seq -w 10| sed -r 's#(.*)# useradd bubu\1;echo 123456|passwd --stdin bubu\1#g'|bash

  

seq命令

-w 补零

  • sed命令  必须得用单引号使用表达式
  • -i 是直接对文件编辑插入操作  &&\如果不加这个,脚本中是异步执行的,加了这个就是同步执行
  1. 此例子是对本地ip地址进行修改
  1. sed -ri 's#IPADDR=(.*)10#IPADDR=\111#g' /etc/sysconfig/network-scripts/ifcfg-ens33 &&\
  2. systemctl restart network &&\
  3. echo "服务器地址是:"$(hostname -I)>>~/qq.txt
  • -n  根据sed原理可知 默认不输出文本    例子:sed -n '/test/p' ~/qq.txt

上面例子中的格式是固定的,p就是输出处理,print

n和i 一定要注意使用,否则会问题的,修改文件一定要备份源文件

  • p   print      输出信息
  1. sed -n '1,3p' ~/qq.txt         #输出1到3行
  • i    insert    插入信息
  1. sed '1ithis is insert' qq.txt    #在第一行之前插入信息

因为i是直接修改文件的。所以修改之前记得备份文件,可以使用-i.bak的方法,这样编辑之前创建bak文件了

  • a     append  附加信息
  1. sed '$athis is insert' qq.txt    #在最后一行之后插入信息
  • -e  需要多次执行sed命令时,用-e进行区分
  1. sed -e '/bulusi/athis is new data' -e "/yangci/i ddw" qq.txt    
  • d  删除信息
  1. #删除第一行到第三行
  2. sed '1,3d' qq.txt

  3. #删除第三行到最后一行
  4. sed '3,$d' qq.txt

  5. #删除带有test的行
  6. sed '/test/d' qq.txt

    #删除第一行和第三行
    sed '1d;3d' qq.txt

    #不显示空行,相当于把行给删除了
    sed '/^$/d' qq.txt  

    #对带有#号进行修改 原有的格式是#,但可以/进行代替,所以含有#号的文本就可以修改了
    sed 's/#best/bast/g'  

    #获取ip地址
    ip addr s eth0|sed -rn '3s#^.*net (.*)/20.*#\1#gp'
  • 题目

1.批量修改命名文件,在目录下有base1.txt~base10.txt,批量修改为base1~10.txt

  1. find ~/base/ -type f|sed -r 's#(.*)\.(.*)#mv \1.\2 \1.jpg#g'|bash
    #另一种方法,主要区别就是,&符号的使用,&是将找到信息放出来,可以理解为集合
    find ~/base/ -type f|sed -r 's#(.*)txt#mv & \1jpg#g'|bash
    #也可以使用rename命令
    rename .txt .jpg base*.txt

2.将目录下test.c文件中将 printf("\n********\n");改为print("*******")

代码片段

注意:特色符号要用\修饰,不然不能准确让系统识别,匹配正则时)("符号都要\修饰

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <sys/wait.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7.  
  8. int flag_wait=1;
  9.  
  10. void stop1()
  11. {
  12. flag_wait=0;
  13. printf("\nChild process1 is killed by parent!");
  14. }
  15.  
  16. void stop2()
  17. {
  18. flag_wait=0;
  19. printf("\nChild process2 is killed by parent!");
  20. }
  21.  
  22. void stop()
  23. {
  24. printf("\n 手动中断\n");
  25. }
  26.  
  27. int main()
  28. {
  29. pid_t pid1,pid2;
  30. //如果出现终止操作,则调用stop函数。
  31. //signal监听到中断信号后,会重新回到原来执行的地方,也就是sleep(5)下一行代码
  32. signal(2,stop);
  33. while((pid1=fork())==-1);
  34. //主进程
  35. if(pid1>0)
  36. {
  37. while((pid2=fork())==-1);
  38. // 主进程执行
  39. if(pid2>0)
  40. {
  41. sleep(5);
  42. kill(pid1,16);
  43. kill(pid2,17);
  44. wait(0);
  45. wait(0);
  46. printf("\nParent process is killed!\n");
  47. exit(0);
  48. } else
  49. {
  50. // 子进程2执行
  51. signal(17,stop2);
  52. while(flag_wait);
  53. exit(0);
  54. }
  55. } else
  56. {
  57. // pid1子进程执行
  58. signal(16,stop1);
  59. while(flag_wait);
  60. exit(0);
  61. }
  62. return 0;
  63. }
  1. sed -r 's#printf\(\"\\n(.*)\)#print("\\n\1)#g' test.c
  • awk
ip.log

  1. 2020-10-14 192.168.1.2 /api/bbs/login
  2. 2020-10-14 192.168.2.2 /api/bbs/login
  3. 2020-10-12 192.168.3.2 /api/bbs/login
  4. 2020-10-11 192.168.4.2 /api/bbs/login
  5. 2020-11-12 192.168.5.2 /api/bbs/login
  6. 2020-10-24 192.168.1.2 /api/bbs/login
  7. 2020-10-14 192.168.3.2 /api/bbs/home
  8. 2020-10-14 192.168.3.2 /api/bbs/menu
  9. 2020-11-12 192.168.5.2 /api/bbs/index
  10. 2020-10-24 192.168.6.2 /api/bbs/login
  11. 2020-10-14 192.168.1.2 /api/bbs/login
  12. 2020-10-14 192.168.1.2 /api/bbs/login

测试文本

  • 初学小提示

NR指的是行,大于第二行的信息,NF指的列(Date ip route)这样NF就是3了

  1. awk "NR>2" ip.log

awk中使用BEGIN,BEGIN的作用可以理解为表头,END理解为结束后使用的字段。

  1. awk 'BEGIN{ print("Date","ip","route") }{print $0}END{print "操作结束"}' ip.log|column -t
  • #输出指定列  

下面是固定格式,默认以空格为分隔符,,$0表示的是一整行,$1,$3 是指只显示第一列和第三列

  1. awk '{print $1,$3}' ip.log
  2.  
  3. #指定输出某行的列,/路径需要用\进行转义
  4. awk '/api\/bbs\/login/{print $1,$3}' ip.log
  • -F  指定分隔符的类型  这样就以:分隔符,找出第一列和第三列
  1. awk -F ":" '{print $1,$3}' ip.log
  2.  
  3. #取最后一列
  4. awk -F ":" '{print $1,$NF}' ip.log
  5.  
  6. #取最后第二列,一定要加小括号,不然就变成减法操作了
  7. awk -F ":" '{print $1,$(NF-1)}' ip.log
  1. #补充知识点 [ ,]里面是空格和逗号,代表的是以空格和为分隔符,分割的列数就是从左到右开始算,+号是多次匹配
  2. uptime|awk -F "[ ,]+" '{print $9}'
  1.  
  • gsub  格式:gsub(/需要替换的字符/,"修改后的信息",将哪列信息进行修改)
  1. #将日期分隔符"-"替换为"#"符号
  2. awk '$1~/2019/{gsub(/-/,"#",$1);print $0}' ip.log
  • 练手题目
  1. #题1·找出192.168.1 ip段的访问路径
  2. awk '/192.168.1.*/{print $1,$NF}' ip.log
  3.  
  4. #第二种做法(严谨) ~代表以第二列开始匹配以192.168.1开头的ip地址段
  5. awk '$2~/^192.168.1.*/{print $1,$NF}' ip.log
  6.  
  7. #题2·找出ip后两位为5.2和1.2的ip段的访问时间和路径  解释:(5.2)$ 意思就是以这个结尾的,column -t 专治强迫症
  8. awk '$2~/(5.2)$|(1.2)$/{print $1,$2,$3}' ip.log|column -t
  9.  
  10. #题3·用awk计算出空行的行数
  11. awk 'BEGIN{i=0}/^$/{i++}END{printf("总行数是%d\n",i)}' ip.log
  12.  
  13. #题4·统计普通用户和虚拟用户的数量(/etc/passwd 查看用户情况)
  14. #普通用户(含有bash就是普通用户)
  15. awk 'BEGIN{i=0}$NF~/bash/{i++}END{print i}' /etc/passwd
  16. #虚拟用户(加了个!,表示取反)
  17. awk 'BEGIN{i=0}$NF!~/bash/{i++}END{print i}' /etc/passwd

新测试数据

#题5·统计:符号第二列和第三列的总数

awk -F ":" 'BEGIN{print("第一总额","第二总额");sum1=0;sum2=0}$NF!~/^$/{sum1+=$2;sum2+=$3}END{print sum1,sum2}' ip.log|column -t

  1.  
  1. #使用三剑客,屏蔽#开头和空行的文本
  2. grep -Ev '^#|^$' ip.log
  3.  
  4. awk '$1!~/^#|^$/{print $1,$2,$3}' ip.log

sed原理

linux 三剑客(持续更新)排版后续再说,边学边记笔记的更多相关文章

  1. linux实用指令 | 程序员线上排查必知必会linux指令(持续更新中)

    Linux线上排查程序员实用指南 一.乱码问题 二.帮助指令 1. help命令 2. man命令 3. info命令 三.性能监测与优化 1. top命令 参考资源 Linux线上排查程序员实用指南 ...

  2. Java开发需掌握的常用Linux命令(持续更新)

    linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...

  3. 你不知道的Linux(持续更新中)

    1.关于GNU.Linux.GNU/Linux三者的关系 GNU 项目创始于一九八四年,旨在开发一个类似 Unix ,且为自由软件的完整的操作系统: GNU 系统.(也可把GNU看成一个自由软件工程) ...

  4. Linux 文件(持续更新)

    一.文件类型 Linux操作系统把所有内容(文件.图片.视频.设备)都当作文件看待.处理,即一切皆文件. Linux系统把所有文件分为七种类型: 文件类型 文件类型标识 说明 使用ls -l命令查看文 ...

  5. Linux记录~持续更新~

    ls -ildha /etc -i 显示对应id号 唯一标识 -l 显示详情 -d 显示当前文件夹 不包括子目录 -h 单位为KB 而不是B -a 显示所有 包括隐藏文件 mkdir mkdir -p ...

  6. Linux 集锦(持续更新中)

    // 获取文件夹下的代码总行数 find . -name "*.*" | xargs wc -l // ls 排序 ls -lt 按照最后修改时间降序 ls -lrt 按照时间升序 ...

  7. linux技巧-持续更新

    终端下锁屏ctrl + s,解锁 ctrl + q 长时间运行命令,防中断 screen 注意,screen命令里面是不可以滚动屏幕,查看以前记录的 :  ctrl+A + [ 终端切割屏幕,类似vi ...

  8. 深入理解Java虚拟机--个人总结(持续更新)

    深入理解Java虚拟机--个人总结(持续更新) 每天按照书本学一点,会把自己的总结思考写下来,形成输出,持续更新,立帖为证 -- 2020年7月7日 开始第一次学习 -- 2020年7月8日 今天在百 ...

  9. Linux命令(持续更新ing)

    *.命令语法:  a.在进行参数设定时,通常为“-”号,若为完整参数名称,则输入“--”符号;  b.指令太长的时候,可以使用“\”符号使指令连续到下一行;  c.各种符号的意义:    ''     ...

随机推荐

  1. 走进Spring Boot源码学习之路和浅谈入门

    Spring Boot浅聊入门 **本人博客网站 **IT小神 www.itxiaoshen.com Spring Boot官网地址:https://spring.io/projects/spring ...

  2. numpy基础教程--对数组进行水平拼接和竖直拼接

    在处理数组的时候经常要用到拼接,numpy中有两个非常实用的函数,可以快捷对数组进行拼接 1.hstack(tup)函数可以接收维度相同的数组,进行水平拼接. 2.vstack(tup)用来竖直拼接 ...

  3. 为什么重写equals()就要重写hashcode()

    阿里巴巴开发规范 只要重写 equals,就必须重写 hashCode 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方 ...

  4. jsp部分乱码(并不是没有设置编码的问题)

    当页面跳转的时候,还是有中文的乱码存在,最后发现我没有写页面的提交方式, <form action = "show.jsp"> 用户名:<input type=& ...

  5. SpringBoot 设置服务一启动就执行、初始化数据

    定义一个类实现ApplicationRunner接口,然后Override这个ApplicationRunner接口的run方法 @Component public class TaskRunner ...

  6. 【LeetCode】971. Flip Binary Tree To Match Preorder Traversal 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 前序遍历 日期 题目地址:https://leetc ...

  7. 【LeetCode】567. Permutation in String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/permutati ...

  8. 【LeetCode】521. Longest Uncommon Subsequence I 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  9. 【剑指Offer】链表中倒数第k个节点 解题报告(Python)

    [剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  10. 【LeetCode】109. Convert Sorted List to Binary Search Tree 解题报告(Python)

    [LeetCode]109. Convert Sorted List to Binary Search Tree 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...