grep
Global search regular expression and print out the line
全面搜索研究正则表达式并显示出来
grep命令时一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查。打印匹配到的行
由正则表达式或者字符及基本文本字符所编写的过滤条件
grep 匹配条件 处理文件
grep root passwd
grep -i root passwd ##不区分大小写
grep -i "\<root" passwd ##root前没有其他字
grep -i "root\>" passwd ##root后没有其他字
grep -i "^root" passwd ##以root开头
grep -i "root$" passwd ##以root结尾
grep -E "root|ROOT" passwd ##当使用扩展正则时应加E
grep 中字符的匹配次数设定
* 字符出现 0-任意次![在这里插入图片描述](https://img-blog.csdnimg.cn/20190228110023519.png)
\? 字符出现 0-1次
\+ 字符出现 1-任意次
{n} 字符出现 n次
{n,m} 字符最少出现n次,最多出现m次
{n,} 字符最少出现n次
sed
行编辑器
stream editor
用来操作纯 ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行
sed 符合模式条件的处理 不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,知道文件末尾
sed 对字符的处理
p 显示
d 删除
a 添加
c 替换
w 写入
i 插入
-n ##仅显示script处理后的结果
sed -n /^#/p fstab ## 显示以#开头的行
sed -n '/^#/!'p fstab ##显示不以#开头的行
cat -n fstab | sed -n '6p' ##显示第六行
cat -n fstab | sed -n '6p;3p' ##显示第六行和第三行
cat -n fstab | sed -n '2,6!p' ##显示除了2到6行以外行
d 模式操作
sed '/^UUID/d' fstab ##显示除UUID开头的行
sed '/^$/d' fstab ##显示除空行以外的行
sed '1,4d' fstab ##显示除1到4行以外行
w 模式操作
sed '/^#/w /mnt/testfile' fstab ##将fstab#开头行内容写入testfile
sed '1r/mnt/hello' fstab ##将hello第一行内容写入 fstab
c 模式操作
sed '/^#/chello' fstab ##将#开头行替换成hello
i 模式操作
sed '/^UUID/ihello' fstab ##在UUID 开头行前加入hello
a 操作模式
sed '/^UUID/ahello' fstab ##在UUID开头行后加入hello
=
显示行号
sed -ne '/^UUID/=;/^UUID/p' fstab | sed 'N;s/\n//g' ##=显示UUID行号 并显示UUID行内容
N 将模式空间内容整合并将换行替换
G
给行加入一空行
g 替换
给passwd文件每行加入行号
sed '=' -i passwd
sed 'N;s/\n/ /g' -i passwd
sed 's/nologin/bash/g' passwd ##将nologin替换还曾bash
sed '1,5s/nologin/bash/g' passwd ##将1到5行nologin替换成bash
sed '5s/nologin/bash/g;3s/nologin/bash/g' passwd ##将第三行和第五行 nologin替换成bash
sed '/daemon/,/mail/s/nologin/bash/g' passwd ##将daemon行到mail行 nologin替换成bash
sed 's/\// /g' passwd ##将/替换成空格
sed 's@/@ @g' passwd ##将/替换成空格
修改apache端口号
#!/bin/bash
[ -z "$1" ] &&{
echo -e "\033[31mError: Please input port number for Apache Server\033[0m"
exit
}
sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd
echo -e "\033[32mPort has change to $1 \033[0m"
根据文件建立用户和密码
#!/bin/bash
Max_Line=`sed -n '$=' $1`
for i in $(seq 1 $Max_Line)
do
USERNAME=`sed -n "${i}p" $1`
PASSWORD=`sed -n "${i}p" $2`
id $USERNAME &> /dev/null && {
echo "$USERNAME is exist"
}||{
useradd $USERNAME
echo $PASSWORD | passwd --stdin $USERNAME &> /dev/null && echo $USERNAME CREATED
}
done
awk 基本用法
awk '{print FILENAME}' passwd
awk '{print NR}' passwd ##显示passwd有多少行
awk -F : '{print NF}' passwd ##以:为分隔符显示多少列
awk -F : 'BEGIN{print "hello"}{print $1}END{print "end"}' passwd ##开始时输出hello 输出每行第一列 结束时输出end
awk -F : '/bash$/' passwd ##输出以bash为结尾的行
awk -F : '/bash$/{print $1}' passwd ##输出以bash结尾的行的第一列
awk 'BEGIN{N=0}/bash$/{N++}END{print N}' ##输出以bash为结尾的行数
awk '/^a|bash$/' passwd ##输出以a开头或以bash结尾的行
awk -F : '$6~/bin$/' passwd ##显示第六列以bin结尾的行
awk -F : '$6~/^/\home/&&/bash$/{print $1}' /etc/passwd ##显示有多少用户
ifconfig eth0 | awk '/inet\>/{print $2}' 显示ip
find
-name
-maxdepth ##-maxdepth 2 最大深度小于2的
-mindepth ##-mindepth 2 最小深度大于2的
-not
-user ##用户
-group ##用户组
-a ##且
-o ##或
-size 20k ##大小为20k
-size -20k ##大小小于20k
-size +20k ##大小大于20k
-type
-ctime 10 ##创建时间为10天
-ctime -10 ##小于10天
-ctime +10 ##大于10天
-cmin +|-10 ##大于或小于10分钟
-cmin 10 ##10分钟
-perm /444 ##满足其中一个权限即可
-perm 444 ##权限为444的文件
-perm -444 ##都满足且权限可大于444