###Linux三剑客-SED 字符流编辑器 Stream Editor
sed --version
查询多行
sed -n '1p;3p;5p' person.txt
##增加
#加行 sed '3a xxxxx' person.txt
sed '3i xxxxx' person.txt
3a在3行的下一行增加3i在3行的前一行增加
#$ 最后一行
#!p不显示 sed -n '/^$/!p' person.txt
sed '$!d' person.txt 不是最后一行的都删除
awk '!/^$/' person.txt awk的!加前面
#替换
s替换这一行中第一个找到的字符串
g(global)每一行进行全局替换-->s
i i.bak/i.ori 表示先备份源文件再修改源文件内容
#sed中使用变量
x=oldboy
y=oldgirl
sed "s#$x#$y#g" person.txt 一定要注意用"",' '变量不能转化
单引号:所见即所得 双引号:与单引号类似,特殊符号会被解析 $ $() `` !
#反向引用 \1第一个小括号中的匹配内容 \2第二个小括号中的匹配内容 sed最多可记9个。
#ip a s eth0查看eth0网卡信息
#sed 总结
sed 找谁 (!不)干啥
具体的行号 p--print 显示 与-n一起使用
正则/oldboy//^101/ 增加 a--append 追加/i--insert 插入
范围1,4 删除d--delete
范围/101/,/104/ 替换s--substitute
###Linux三剑客-awk
取列 取行 #统计 计算
awk --version
awk 参数 '条件(找谁){干啥}' 文件
创建环境
mkdir -p /server/files/
cat >>/server/files/reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF
#正则表达式 awk有两个表示的意思不太一样。
^ 字符串开头
例:匹配所有以oldboy开头的字符串 /^oldboy/
匹配所有第三列中以oldboy开头 $3~/^oldboy/
$ 字符串结尾
例: 匹配所有以oldboy结尾的字符串 /oldboy$/
匹配第三列中以oldboy结尾的文本(字符串) $3~/oldboy$/
##思路,先想条件,通过条件的数据再去操作。
awk '/Xiaoyu/' reg.txt = awk '$0~/Xiaoyu/' reg.txt
#显示Xiaoyu的姓氏和ID号码
awk '$2~/Xiaoyu/{print $1,$3}' reg.txt
#显示所有以41开头的ID号码的人的全名和ID号码
awk '$3~/^41/{print $1,$2,$3}' reg.txt
#显示所有ID号码最后一位数字是1或5的人的全名
awk '$3~/[15]$/{print $1,$2}' reg.txt
awk '$3~/(1|5)$/{print $1,$2}' reg.txt
#显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
#awk中的替换 gsub(替换substitution awk gsub;sed sg)
(gsub中的g和sg中的g一样,都是代表整行,不加为第一个)
gsub(/目标/,"替换为什么",第几列)
awk '{gsub(//,"",$4)}' reg.txt
awk '{gsub(/:/,"$",$4);print}' reg.txt 没有默认输出
awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' reg.txt
#gsub为函数,相当于awk中的命令
#awk进行统计计数公式 #特殊模式BEGIN和END
BEGIN{} BEGIN里面的内容,会在awk读取文件内容之前运行
测试、计算(用的少)
#END{}*** END{}里面的内容,会在awk读取完文件的最后一行之后运行。
一般是用来显示最终结果的。(用的多)
先计算,END显示结果。
#统计/etc/services文件里面的空行数量
awk '/^$/{i=i+1}END{print i}' /etc/services
#公式i=i+1 一般用于统计
awk '/^$/{i=i+1;print i}' /etc/services
简化公式:i++
#awk数组-统计与计算
处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
#secure系统日志分析练习
谁在破解你的密码(Failed passwdword 每个ip地址出现的次数)
分析系统的每个用户被破解的次数
总结:
1.awk数组进行统计(最核心)
i=i+1 == i++ 统计次数
i=i+$n == i+=$n 累计相加 累加
2.awk执行过程
3.awk通过正则作为模式
4.BEGIN和END特殊模式
#####linux编程
cat /etc/shells 可以查看命令解释器种类。
file命令查看是否是shell脚本。
脚本第一行 #!/bin/bash #!称为幻数 能被内核识别 也可以#!/bin/sh
第二行 #desc: 描述
第三行 #author: 作者
第四行 #time: 时间
第五行 #version: 版本
###变量
#普通变量 字母、数字、下划线组成 必须以字母或下划线开头
驼峰语法:首个单词字母小写,其余单词首字母大写 oldboyAgeSex=1
week=10;echo ${week}day
$week实际上就是${week}。
#全局变量/环境变量 大写,linux里面哪里都可以用。
在创建他们的shell及其派生出来的子Shell中使用(如脚本中)
另开一个shell和su到别的用户都不行。
env命令 只显示全局变量
取消变量:unset OLDBOY (普通全局都可以)
#与用户环境变量有关的文件/目录
#全局环境变量配置文件
/etc/profile(基本只要这个) /etc/bashrc
/etc/profile.d(用户登录到系统,会运行这个目录下面的脚本)
脚本要有执行权限(profile.d里的)
#用户环境变量配置文件 ~/profile ~/bashrc
#特殊变量
#位置变量
$0:脚本的名字
$n(n代表数字) :第n个参数
$1:第一个参数
$#:参数的个数(脚本一共有多少个参数)
[root@oldboyedu-01 scripts]# sh show-arg.sh a b c
$0:show-arg.sh $1$2$3:a b c $#:3
#进程状态变量
$?:显示上一个命令的执行结果。
命令执行正确 结果0
命令执行错误 结果非0
#如何向变量中放内容
#直接给出
sh show-arg.sh 10 20
#找别人要-read读入 read -p "input x y:" x,y
read得到的输入默认存储在变量REPLY
-p “提示语句”,则屏幕就会输出提示语句
-t 等待时间
-s 关闭回显,用于密码输入。
###循环
#条件表达式 明天是否下雨 下雨/不下
#判断文件
好习惯:先敲一对[],然后退格输入2个空格,最后再回退一个空格
开始输入[ -f /etc/hosts ]([]两边必须有空格才生效)
-f 文件是否存在 0存在 1不存在
-d 目录是否存在 0存在 1不存在
#判断整数
等于equal:-eq [1 -eq 1]
不等于not equal:-ne [ 1 -ne 10 ]
大于greater than:-gt [ 2 -gt 1 ]
大于等于greater equal:-ge
小于less than:-lt
小于等于less equal:-le
简单案例:判断命令行参数个数等于2.
#if条件语句
#单分支条件语句
if [ $num1 -gt $num2 ];then
echo $num1 greater than $num2
else
echo $num1 less than $num2
fi
#语法
if [ $num1 -gt $num2 ];then
echo $num1 greater than $num2
else
echo $num1 less than $num2
fi
小结:
1.条件表达式
[ -d /oldboy ]
[ -f /oldboy/oldboy.txt ]
[ 10 -gt 9 ] great than >
[ 10 -ge 9 ] great equal >=
[ 10 -eq 10 ] equal ==
[ 10 -ne 9 ] not equal !=
[ 9 -lt 90 ] less than <
[ 9 -le 90 ] less equal <=
可以 man test
其实 [ -d /oldboy ] === test -d /oldboy (现在这个用的少了,但是看[]的参数可以man test)
2.判断
单分支判断
判断脚本的参数个数不是2就退出。
双分支判断
if [ $1 -gt $2 ];then
echo $1 bigger than $2
else
echo $1 not bigger than $2
fi
如果 [ $1 -gt $2 ];然后
echo $1 bigger than $2
那么
echo $1 not bigger than $2
果如
#for循环语句
格式
for 变量名字 in 列表
do
命令
done
for num in 1 2 3 4 5 6 7
do
echo "the $num number is :$num"
done
for num in {1..100}
do
echo "the $num number is :$num"
done
练习:优化linux的开机启动项目
只保留crond;sshd;network;rsyslog;sysstat,其他的都关闭。
for chk in `awk '!/crond|sshd|network|rsyslog|sysstat/{print $1}' chkconfig.txt`
do
# echo $chk off(第一遍先echo检查)
chkconfig $chk off
done
#执行脚本调试技巧
-x显示过程
[root@oldboyedu-01 scripts]# sh -x ip.sh
+ date +%F_%w
2018-10-28_0
+ awk -F '[: ]+' 'NR==2{print $4}'
+ /sbin/ifconfig eth0
10.0.0.200
+:后接命令
没有+:显示在屏幕上。
总结:
1.特殊变量 位置$1 $2 $0 状态$? 其他$#
2.普通变量命名规则
3.普通变量与环境变量区别
4.与用户有关的文件和目录
5.条件表达式,判断,循环
6.优化系统启动项目
7.批量添加用户并设置随机密码
相关推荐
**sed工具介绍** `sed` 是“流编辑器”(Stream Editor)的缩写,它是一种功能强大的文本处理工具,广泛应用于Linux和Unix系统中。`sed` 可以读取数据流,对输入的数据进行各种操作,如替换、删除、插入等,并将...
Sed AWK编程指南Sed AWK编程指南Sed AWK编程指南
sed命令和awk编程教程,理论与示例相结合。
本文将深入探讨shell编程,以及与之紧密相关的sed、awk和grep命令,这些都是Linux系统中进行文本处理和数据操作的重要工具。 首先,让我们了解什么是Shell编程。Shell是操作系统提供的一个接口,允许用户与系统内核...
awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell
《sed与awk 第二版 例程 源代码》是一部深入探讨文本处理工具sed和awk的经典著作。这本书的核心在于其丰富的例程和源代码,旨在帮助读者掌握这两个强大的命令行工具的用法。sed(流编辑器)和awk(编程语言)在IT...
在Linux系统中,Shell编程是系统管理员和开发者日常工作中不可或缺的一部分。它允许用户通过命令行接口执行各种自动化任务。在给定的压缩包文件中,我们聚焦于三个关键的Shell工具:awk、sed和crontab。下面将详细...
Linux 主要shell命令、sed、awk使用详解 Linux 主要shell命令详解 shell 是用户和 Linux 操作系统之间的接口。Linux 中有多种 shell,其中缺省使用的是 Bash。本章讲述了 shell 的工作原理,shell 的种类,shell ...
学习shell时做的笔记,包含sed,awk,sort,uniq的使用
Linux与unix shell编程指南.rar 第一部分 shell 第1章 文件安全与权限 1 第2章 使用find和xargs 14 第3章 后台执行命令 22 第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤...
sed与awk(第二版)学习笔记
本文将深入探讨"Shell脚本专家指南"、"sed与awk第二版"以及"shell十三问"这三份文档所涵盖的重要知识点。 首先,"Shell脚本专家指南"详细介绍了如何编写高效且实用的Shell脚本。这包括了对Bash Shell的深入了解,如...
《Sed与Awk》是IT领域中关于文本处理的经典之作,主要讲解了两种强大的命令行工具:Sed(流编辑器)和Awk(数据处理语言)。这两款工具在Linux和Unix系统中广泛使用,尤其适用于数据提取、转换、报告生成等任务。 ...
shell编程中经常用到sed命令,本文详细介绍了shell常用命令sed详细用法
8. 数据排序:可以使用 awk 命令来对数据进行排序,例如按照第二列排序。 sed 9. 行号打印:可以使用 sed 命令来打印文件的行号,例如 `sed '=' file`。 10. 空行打印:可以使用 sed 命令来打印文件的空行,例如 `...
详细介绍了Shell编程中字符截取命令-cut printf awk sed。每一步都有详细操作演示,并附有截图。适合初学者。
Sed与awk第二版(高清版).pdf
通过学习《sed与awk(第二版)》,读者不仅能熟练掌握这两个工具,还能提升在数据处理、日志分析、脚本编程等方面的能力,为日常的Linux/Unix系统管理提供极大的便利。无论是系统管理员、程序员还是数据分析人员,这...
11.2.3 Shell编程-字符截取命令-awk命令.mp4 11.2.4 Shell编程-字符截取命令-sed命令.mp4 11.3 Shell编程-字符处理命令.mp4 11.4 Shell编程-条件判断.mp4 11.5.1 Shell编程-流程控制-if语句.mp4 11.5.2 Shell...
包括: 1. sed与awk+第三版(中文高清晰),内容非常全面详细,看了觉得很不错,学习sed和awk的必备书籍。 2. Effective awk Programming, 4th Edition 3. Sed与awk第二版(高清版).pdf