linux 三剑客(持续更新)排版后续再说,边学边记笔记
切记:seq命令用于产生从某个数到另外一个数之间的所有整数。sed才是处理文本的命令
在遇到扩展符号时,需要添加特定参数,| () +[] 为扩展符号时,必须添加参数
egrep/grep -E sed -r
windows和linux互传文件,yum install lrzsz -y,直接拖拽就行了
空行的表达式:'/^$/'
- grep命令 可以使用单引号或者双引号
-v --取反
$ --结尾
^ --开头
查看文件中非注释的信息
grep -v "^#" qq.txt通过 ip address s ens33获取到ip地址,因为你使用扩展符号,所以要用egrep
ip address s ens33 | egrep "([0-9]+\.){3}[0-9]+"
#获取单行ip地址
ip address s ens33|egrep "([0-9]+\.){3}[0-9]+" -o|head -1批量创建用户
echo syscal{01..10} | xargs -n1 | sed -r 's#(.*)#useradd \1#g'|bash批量创建用户并设置初始密码为123456
seq -w 10| sed -r 's#(.*)# useradd bubu\1;echo 123456|passwd --stdin bubu\1#g'|bash
seq命令
-w 补零
- sed命令 必须得用单引号使用表达式
- -i 是直接对文件编辑插入操作 &&\如果不加这个,脚本中是异步执行的,加了这个就是同步执行
此例子是对本地ip地址进行修改sed -ri 's#IPADDR=(.*)10#IPADDR=\111#g' /etc/sysconfig/network-scripts/ifcfg-ens33 &&\
systemctl restart network &&\
echo "服务器地址是:"$(hostname -I)>>~/qq.txt
- -n 根据sed原理可知 默认不输出文本 例子:sed -n '/test/p' ~/qq.txt
上面例子中的格式是固定的,p就是输出处理,print
n和i 一定要注意使用,否则会问题的,修改文件一定要备份源文件
- p print 输出信息
sed -n '1,3p' ~/qq.txt #输出1到3行
- i insert 插入信息
sed '1ithis is insert' qq.txt #在第一行之前插入信息因为i是直接修改文件的。所以修改之前记得备份文件,可以使用-i.bak的方法,这样编辑之前创建bak文件了
- a append 附加信息
sed '$athis is insert' qq.txt #在最后一行之后插入信息
- -e 需要多次执行sed命令时,用-e进行区分
sed -e '/bulusi/athis is new data' -e "/yangci/i ddw" qq.txt
- d 删除信息
#删除第一行到第三行
sed '1,3d' qq.txt
#删除第三行到最后一行
sed '3,$d' qq.txt
#删除带有test的行
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
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*.txt2.将目录下test.c文件中将 printf("\n********\n");改为print("*******")
代码片段
注意:特色符号要用\修饰,不然不能准确让系统识别,匹配正则时)("符号都要\修饰
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h> int flag_wait=1; void stop1()
{
flag_wait=0;
printf("\nChild process1 is killed by parent!");
} void stop2()
{
flag_wait=0;
printf("\nChild process2 is killed by parent!");
} void stop()
{
printf("\n 手动中断\n");
} int main()
{
pid_t pid1,pid2;
//如果出现终止操作,则调用stop函数。
//signal监听到中断信号后,会重新回到原来执行的地方,也就是sleep(5)下一行代码
signal(2,stop);
while((pid1=fork())==-1);
//主进程
if(pid1>0)
{
while((pid2=fork())==-1);
// 主进程执行
if(pid2>0)
{
sleep(5);
kill(pid1,16);
kill(pid2,17);
wait(0);
wait(0);
printf("\nParent process is killed!\n");
exit(0);
} else
{
// 子进程2执行
signal(17,stop2);
while(flag_wait);
exit(0);
}
} else
{
// pid1子进程执行
signal(16,stop1);
while(flag_wait);
exit(0);
}
return 0;
}sed -r 's#printf\(\"\\n(.*)\)#print("\\n\1)#g' test.c
- awk
ip.log
2020-10-14 192.168.1.2 /api/bbs/login
2020-10-14 192.168.2.2 /api/bbs/login
2020-10-12 192.168.3.2 /api/bbs/login
2020-10-11 192.168.4.2 /api/bbs/login
2020-11-12 192.168.5.2 /api/bbs/login
2020-10-24 192.168.1.2 /api/bbs/login
2020-10-14 192.168.3.2 /api/bbs/home
2020-10-14 192.168.3.2 /api/bbs/menu
2020-11-12 192.168.5.2 /api/bbs/index
2020-10-24 192.168.6.2 /api/bbs/login
2020-10-14 192.168.1.2 /api/bbs/login
2020-10-14 192.168.1.2 /api/bbs/login测试文本
- 初学小提示
NR指的是行,大于第二行的信息,NF指的列(Date ip route)这样NF就是3了
awk "NR>2" ip.logawk中使用BEGIN,BEGIN的作用可以理解为表头,END理解为结束后使用的字段。
awk 'BEGIN{ print("Date","ip","route") }{print $0}END{print "操作结束"}' ip.log|column -t
- #输出指定列
下面是固定格式,默认以空格为分隔符,,$0表示的是一整行,$1,$3 是指只显示第一列和第三列
awk '{print $1,$3}' ip.log #指定输出某行的列,/路径需要用\进行转义
awk '/api\/bbs\/login/{print $1,$3}' ip.log
- -F 指定分隔符的类型 这样就以:分隔符,找出第一列和第三列
awk -F ":" '{print $1,$3}' ip.log #取最后一列
awk -F ":" '{print $1,$NF}' ip.log #取最后第二列,一定要加小括号,不然就变成减法操作了
awk -F ":" '{print $1,$(NF-1)}' ip.log#补充知识点 [ ,]里面是空格和逗号,代表的是以空格和为分隔符,分割的列数就是从左到右开始算,+号是多次匹配
uptime|awk -F "[ ,]+" '{print $9}'
- gsub 格式:gsub(/需要替换的字符/,"修改后的信息",将哪列信息进行修改)
#将日期分隔符"-"替换为"#"符号
awk '$1~/2019/{gsub(/-/,"#",$1);print $0}' ip.log
- 练手题目
#题1·找出192.168.1 ip段的访问路径
awk '/192.168.1.*/{print $1,$NF}' ip.log #第二种做法(严谨) ~代表以第二列开始匹配以192.168.1开头的ip地址段
awk '$2~/^192.168.1.*/{print $1,$NF}' ip.log #题2·找出ip后两位为5.2和1.2的ip段的访问时间和路径 解释:(5.2)$ 意思就是以这个结尾的,column -t 专治强迫症
awk '$2~/(5.2)$|(1.2)$/{print $1,$2,$3}' ip.log|column -t #题3·用awk计算出空行的行数
awk 'BEGIN{i=0}/^$/{i++}END{printf("总行数是%d\n",i)}' ip.log #题4·统计普通用户和虚拟用户的数量(/etc/passwd 查看用户情况)
#普通用户(含有bash就是普通用户)
awk 'BEGIN{i=0}$NF~/bash/{i++}END{print i}' /etc/passwd
#虚拟用户(加了个!,表示取反)
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
#使用三剑客,屏蔽#开头和空行的文本
grep -Ev '^#|^$' ip.log awk '$1!~/^#|^$/{print $1,$2,$3}' ip.log
sed原理

linux 三剑客(持续更新)排版后续再说,边学边记笔记的更多相关文章
- linux实用指令 | 程序员线上排查必知必会linux指令(持续更新中)
Linux线上排查程序员实用指南 一.乱码问题 二.帮助指令 1. help命令 2. man命令 3. info命令 三.性能监测与优化 1. top命令 参考资源 Linux线上排查程序员实用指南 ...
- Java开发需掌握的常用Linux命令(持续更新)
linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...
- 你不知道的Linux(持续更新中)
1.关于GNU.Linux.GNU/Linux三者的关系 GNU 项目创始于一九八四年,旨在开发一个类似 Unix ,且为自由软件的完整的操作系统: GNU 系统.(也可把GNU看成一个自由软件工程) ...
- Linux 文件(持续更新)
一.文件类型 Linux操作系统把所有内容(文件.图片.视频.设备)都当作文件看待.处理,即一切皆文件. Linux系统把所有文件分为七种类型: 文件类型 文件类型标识 说明 使用ls -l命令查看文 ...
- Linux记录~持续更新~
ls -ildha /etc -i 显示对应id号 唯一标识 -l 显示详情 -d 显示当前文件夹 不包括子目录 -h 单位为KB 而不是B -a 显示所有 包括隐藏文件 mkdir mkdir -p ...
- Linux 集锦(持续更新中)
// 获取文件夹下的代码总行数 find . -name "*.*" | xargs wc -l // ls 排序 ls -lt 按照最后修改时间降序 ls -lrt 按照时间升序 ...
- linux技巧-持续更新
终端下锁屏ctrl + s,解锁 ctrl + q 长时间运行命令,防中断 screen 注意,screen命令里面是不可以滚动屏幕,查看以前记录的 : ctrl+A + [ 终端切割屏幕,类似vi ...
- 深入理解Java虚拟机--个人总结(持续更新)
深入理解Java虚拟机--个人总结(持续更新) 每天按照书本学一点,会把自己的总结思考写下来,形成输出,持续更新,立帖为证 -- 2020年7月7日 开始第一次学习 -- 2020年7月8日 今天在百 ...
- Linux命令(持续更新ing)
*.命令语法: a.在进行参数设定时,通常为“-”号,若为完整参数名称,则输入“--”符号; b.指令太长的时候,可以使用“\”符号使指令连续到下一行; c.各种符号的意义: '' ...
随机推荐
- C/C++ Qt 数据库与Chart历史数据展示
在前面的博文中具体介绍了QChart组件是如何绘制各种通用的二维图形的,本章内容将继续延申一个新的知识点,通过数据库存储某一段时间节点数据的走向,当用户通过编辑框提交查询记录时,程序自动过滤出该时间节 ...
- 【简】题解 AWSL090429 【价值】
先考虑当要选的物品一定时 显然有个贪心 wi越小的要越先选 所以先按wi从小到大拍序 因为发现正着递推要记录的状态很多 并且wi的贡献与后面选了几个物品有关 考虑正难则反 倒着递推 提前计算wi的贡献 ...
- ZooKeeper 06 - ZooKeeper 的常用命令
目录 1 - 服务端常用命令 2 - 客户端常用命令 3 - 常用四字命令 4 - ZooKeeper 日志的可视化 版权声明 若要部署 ZooKeeper 单机环境,请查看此篇:https://ww ...
- pipeline input步骤
目录 一.简介 二.input步骤复杂用法 三.获取上游pipeline信息 四.超时中止 一.简介 执行imput步骤会暂停pipeline,直到用户输入参数.这是一种特殊的参数化pipeline的 ...
- Nginx配置访问黑名单
目录 一.简介 二.脚本 一.简介 有的时候需要将某些大访问量的ip加入到黑名单中 二.脚本 1.脚本内容为,检测本地并发访问超过15并且是ip地址,则加入nginx黑名单中.其中的53a是deny行 ...
- Tableau如何绘制瀑布图
一.将子类别拖至列,利润拖拽至行,类型改为甘特条形图 二 右键利润-快速表计算-汇总(数据会从左向右显示累计汇总) 三.创建计算字段-[利润] 四.将负利润拖拽到大小,利润拖拽到颜色 分析-合计-显示 ...
- 转: 再谈select, iocp, epoll,kqueue及各种I/O复用机制
首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ...
- box-shadow(盒子阴影)
box-shadow 属性可以设置一个或多个下拉阴影的框 可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开.该属性可设置的值包括阴影的X轴偏移量.Y轴偏移量.模糊半径.扩散半径和颜色. 语法: ...
- LuoguB2035 判断数正负 题解
Content 给定一个数 \(n\),判断这个数的正负. 数据范围:\(-10^9\leqslant n\leqslant 10^9\). Solution 一个基础的分支结构题. if-else ...
- 【九度OJ】题目1047:素数判定 解题报告
[九度OJ]题目1047:素数判定 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1047 题目描述: 给定一个数n,要求判 ...



