笔记
学习各种的笔记
sed的增删改查
r 支持扩展正则
a apend 追加文本到指定行后
i insert 插入文本到指定行前
如sed ‘2a 106,dandan,CSO’ 文本名
在sed工具中 引号比较
sed '2i $PATH' 文本名 #单引号内容原本插入
sed 2i $PATH 文本名不加单引号则错误
sed "2i $PATH" 文本名 加双引号则被解析
多行增
附加录入简单文本 cat > 文本名 <<EOF
内容,,,,
EOF 结束的标志
echo -e '' luo\nluo'' # \n表示换行 \t 表示tab键
sed '2a 内容1\n内容2' 文本名
优化ssh配置
备份 cp /etc/ssh/sshd_config{,.bak}
sed -i '13i port 端口号\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' /etc/ssh/sshd_config
查看 sed -n '13,17p' /etc/ssh/sshd_config
删
sed 'd' 文本名 默认全部删除
sed '2d' 文本名 删除第二行
sed '2,5d' 文本名 删除第二行到第五行内容
sed '/匹配的内容/d' 文本名 匹配到有的内容就删除该行
sed '/内容1/,/内容2/d' 文本名 删除包含内容1的行到内容2的行
sed '3,$d' 文本名 从第三行开始删除直到删除到最后一行
sed '/内容/,3d' 文本名 删除包含内容到第三行的内容
sed软件使用正则表达式会找出所有匹配的行,即使有数字地址限制
sed '2,/内容/d' 文本名 从第二行删除到含内容的行结束
sed 10 随机输出10个数
sed '1,+2d' 文本名 删除第一行到第3(1+2)行的文本
sed '2,3!d' 文本名 除了第二行和第三行以外的内容都删除
sed '/内容/d' 文本名 删除包含内容的行
改,替换
sed '2c 内容' 文本名
sed替换模型
sed -i 's/目标内容/替换内容/g' 文本名 sed -i 's#目标内容#替换内容#g' 文本名
eval sed 's#$x#$y#g' 文本名 eval 命令能读入变量
取ip地址
ifconfig eth0 | sed -rn '2s#^.*addr:(.*) Bcast:.*$#\1#gp'
优化开机
chkconfig --list | egrep -v "sshd|crond|rsyslog|sysstat|network" | awk '{print "chkconfig",$1,"off"}' | bash
直接awk
chkconfig --list | egrep -v "sshd|crond|rsyslog|sysstat|network" | awk '{print "chkconfig",$1,"off"}'
| bash
sed -n '2p' 文本名
sed -n '2,3p' 文本名
sed -n 'p' 文本名 输出全部
按字符串查询
sed -n '/内容/p' 文本名
sed -n '/内容1/,/内容2/p' 文本名
修改文件同时备份
sed -i .bak 's#1111111#222222#g' 文本名
获取行号
sed '=' 文本名 | sed 'N;s#\n# #' #sed命令N读取下一行数据并附加到模式空间
sed '=' 文本名
sed '1,3=' 文本名
sed '/yy/=' 文本名
sed -n '/yy/=' 文本名
sed -n '$=' 文本名
取不连续的行
sed -n '1p;3p;5p' 文本名
sed -n '2,4p;=' 文本名
sed -n '2,4{p;=}' 文本名
awk
awk [options] 'pattern {action}' file
awk -F ":" 'NR>=2 && NR<==6 {print NR,$1}' /etc/passwd
解释: -F 指定分隔符为冒号,相当于以 : 为菜刀,进行字段的切割
NR>=2 && NR<=6 表示模式 条件取第二行到第六行
{print NR, $1} 表示动作,输出NR行号和$1第一列
awk -F ":" 'NR>=2 && NR<=6' /etc/passwd
awk -F ":" '{print NR,$1}' 文本名
awk -F ":" 'NR==1{print NR,$1}NR==2{print NR,$NF}' 文本名 #$NF 最后一列
awk '{print NR,$0}' 文本名 #NR 记录号 $0 整个记录/整行
awk 'BEGIN{RS="[ ]+"}{print $0}' 文本名 #设置RS为空格
遇排序,去重问题
sort -u 去重复 -n 数字排序 -r 反向逆转排序 uniq -c 计数
awk 'BEGIN{RS="[]+"}{print $0}' 文本名 | sort | uniq -c |sort
cat 文本名 | ttr " " "\n" | sort | uniq -c | sort
grep -o "[a-zA-Z]\+" 文本名 | sort | uniq -c | sort
awk -F ":" 'NR>=2&&NR<=5{print $1,$3}' 文本名 冒号为分隔符显示第2行到第5行之间的第一区域和第三区域
awk -F "[ ,]" '{print $3,$NF' 文本名 [ ,] 既空格或者逗号
取ip地址
ifconfig eth0 | awk 'NR==2' | awk -F "[ :]+" '{print $4}'
ORS与OFS两内置变量含义
RS输入记录分隔符,决定awk如何读取或分隔每行(记录)
ORS输出记录分隔符,决定awk如何输出一行(记录)的
FS输入区域分隔符 决定awk读入一行后如何再分为多个区域
OFS输出区域分隔符,决定awk输出每个区域的时候使用什么分隔它们
正则表达式
^ 字符串开头 $字符串结尾 .匹配任意单个字符 *重复0个或多个前一个字符 +重复前一个字符一次或多次 ?匹配0个或前边的字符 []匹配指定字符组内的任一个字符 [^]匹配不在指定字符组内的任一字符 ()子表达式组合 | 或者的意思 x{m} 字符重复m次 x{m,} x字符重复至少m次 x{m,n} x字符重复至少m,但不超过n次
awk -F ":" '/^root/' 文本名 #正则表达式匹配整行
awk -F ":" '$5~/shutdown/' 文本名 #匹配一行中的某列
简单文本 cat >> 位置/文件名 << KOF
awk -F "[ :]+" '$1~/^内容/{print $2,$(NF-1)}' 文本名 #-F 指定分隔符 [ :]+ 连续的空格或冒号 -F "[ :]+ 以连续的空格或冒号为分隔符 /zhang/表示条件,整行中包含内容字符的这个条件 {print 1,(NF-1)} 表示动作,满足条件后,执行显示第一列$1和倒数第二列((NF-1))当然$5也可以
取ip地址
ifconfig eth0 | awk 'BEGIN{RS="[ :]"} NR==31'
ifconfig eth0 | awk -F " (addr:)|(Bcast:)" 'NR==2{print $2}'
ifconfig eth0 | awk -F "[ :]+" 'NR==2{print $4}'
ifconfig eth0 | awk -F "[^0~9]+" 'NR==2{print $2}'
awk正则之{} 花括号
awk -F: '$1~/o{1,2}/" 文本名
awk -F: --posix '$1~/o{1,2}/' 文本名
awk -F: --re-interval '$1~/o{1,2}/' 文本名
取端口
awk -F "[ /]+" '$1~/^(ssh)$|^(http)$|^(https)$|^(mysql)$|^(ftp)$/{print $1,$2)' /etc/services | sort | uniq
awk -F ":"' $5=="root"' 文本名
awk -F ":" '$5~/^root$/' 文本名
awk '/^bin/,NR==5{print NR,$0}' 文本名 #以bin开头的行,到第五行的行号和整行内容
awk -F ":" '$5~/^bin/,/^lp/{print NR,$0}' 文本名 #第五列开始以bin开头的行到以lp开头的行,显示行号及整行内容
awk -F ":" '$5~/^bin/,$5~/^lp/{print NR,$0}' 文本名 #从第五列bin开头字符串的行到第五列lp开头字符串的行
awk特殊模式-BEGIN,END模式
1,内置变量定义
取IP地址
ifconfig eth0 | awk 'BEGIN{FS="(addr:)|(Bcast:)"} NR==2{print $2}'
ifconfig eth0 | awk 'BEGIN{FS="[ :]+"} NR=2 {print $4}'
ifconfig eth0 | awk 'BEGIN{NF="[^0-9.]+"} NR==2 {print $2}'
2,输出表头
awk -F: 'BEGIN{print "username","UID"} {print $1,$3}' 文本名
3,特殊性质
awk 'BEGIN{print "hello world!"}'
awk 'BEGIN{print 10/3}'
awk 'BEGIN{a=1;b=2;print a,b}'
awk 'BEGIN{a=1;b=2;print a,b,a+b}'
END模块
统计空行
grep "^$" 文本名 | wc -l
grep -c "^$" 文本名
awk '/^$/{i++}END{print i}' 文本名
总和
awk '{i=1+$0}END{print i}' 文本名
计数
awk -F "[/]+" '{i++;print $2,i}' 文本名 # i++ i最开始是空的,当awk读取一行,i自身加1
数组替换
awk -F "[/]+" '{h[$2]++;print $2,h["过滤的内容"]}' 文本名 # i替换成h[$2] 相当于创建了数组h[],h[$2]++就等于i++
最终
awk -F "[/]+" '{h[$2]++} END {for (i in h) print i,h[i]}' 文本名
用户账号文件
/etc/passwd
保存用户密码文件
/etc/shadow
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述