grep
grep的格式
grep 匹配条件 匹配文件
grep root passwd(贪婪模式)
grep ^root passwd 以root开头
grep bash$ passwd 以bash结尾
grep -i root passwd 不区分root大小写
grep -v root passwd 反向过滤(展示除符合条件外的信息)
grep ^root|bash$ passwd 展示以root开头或者以bash结尾的用户
grep -2 games passwd 展示符合条件及其前后两条的信息
grep -A2 games passwd展示符合条件及其后两行的信息
grep -B2 games passwd展示符合条件及其前两行的信息
grep的字符匹配次数设定
* 字符出现[0-任意次]
*? 字符出现[0-1次]
\+ 字符出现[1-任意次]
\{n\} 字符出现[n]次
|{m,n\} 字符出现[最少出现m次,最多出现n次]
\{0,n\} 字符出现[0-n次]
\{m,\} 字符出现[至少m次]
\(xy\){n\}xy xy关键字出现[n次]
.* 关键字之间匹配任意字符
grep root passwd 查找文件中含有root的信息
grep ^root passwd 查找文件中以root为开头的信息
查看文件中以bash结尾的信息
grep ‘w…s’ file1查看文件file1中w与s见有两个字符的信息(一个‘.’表示一个字符)
grep ‘ws’ file1查看文件file1中w与s相连两个字符的信息
grep ‘w.s’ file1查看文件file1中w与s见有一个字符的信息(一个‘.’表示一个字符)
grep ‘w…s’ file1查看文件file1中w与s见有六个字符的信息(一个‘.’表示一个字符)
查看可以登陆的用户
grep $sh /etc/passwd | cut -d : -f 1
grep -B2 games passwd 查看paswd文件中games的文件及其前两行(Before)
grep -A2 games passwd 查看passwd文件中game的信息及其后两行(After)
sed命令
sed参数
-e 两个参数并列,每一个参数之前都要加,也可以通‘; ’实现该功能
-n 取消默认输出
-i 修改内容写入文件
-f 指定文件内容作为参数
"=" 大银行书
" $ =" 打印文件总行数
"^$" 空白行
a 行添加
c 行替换
i 行插入
d 行删除
w 写入文件
r 插入文件
s#原内容#新内容#g(替代全文内容 ,分隔符#可以被/或@替代)
sed -n '4p;5p' /etc/fstab 打印文件/etc/fstab的第四行和第五行
sed -n '4,6p' /etc/fstab 打印文件/etc/fstab的第四行到第六行
sed -n '/#/p' /etc/fstab打印文件/etc/fstab的含有‘#’的行
sed -n '/#/!p' /etc/fstab 打印文件/etc/fstab的不含有‘#’的行
sed -n '/^$/!p' /etc/fstab 打印文件/etc/fstab中的非空行
sed -n ‘4p;5p’ /etc/fstab 打印文件/etc/fstab的第四行和第五行
sed -n ‘4,6p’ /etc/fstab 打印文件/etc/fstab的第四行到第六行
sed -n ‘/#/p’ /etc/fstab打印文件/etc/fstab的含有‘#’的行
sed -n ‘/#/!p’ /etc/fstab 打印文件/etc/fstab的不含有‘#’的行
sed -n ‘/^$/!p’ /etc/fstab 打印文件/etc/fstab中的非空行
跳转到/mnt目录下并复制/etc/fstab到/mnt下,并打印该文件行数
sed ‘s@#@2333@g’ fstab 替换全文的#
sed ‘1,3d’ fstab删除文件fstab的1-3行
替换全文的#符为2333
指定文件file为过滤参数
给文加fstab的第三行插入文件file
编写脚本,使得脚本自动添加规定文件的用户到可登陆用户中。
#!/bin/bash
[ -z "$1" ] && {
echo "ERROR : please input userfile following script" ##加入要打印的用户文件
exit
}
[ ! -e "$1" ] && {
echo "$1 is not exist" ##该用户文件不存在
exit
}Max_Num=`wc -l $1 | cut -d " " -f 1` ##统计用户文件中的用户个数
for Line_Num in `seq 1 $Max_Num`
do
USERNAME=`sed -n ${Line_num}p $1`
id $USERNAME &> /dev/null && {
echo $USERNAME is exist! ##若用户存在提示该用户已存在
}||{
useradd $USERNAME ##用户不存在则添加到用户列表中
}
done
awk
1、打印文件的第一列(域) : awk ‘{print $1}’ filename
2、打印文件的前两列(域) : awk ‘{print $1,$2}’ filename
3、打印完第一列,然后打印第二列 : awk ‘{print $1 $2}’ filename
4、打印文本文件的总行数 : awk ‘END{print NR}’ filename
5、打印文本第一行 :awk ‘NR1{print}’ filename
6丶打印文本第一行第一列 awk ‘NR1{print $1}’ filename
-F 分隔符
awk ‘{print FILENAME}’ 打印文件名
‘{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲' 打印第二列 '/bash/’ 打印以bash结尾的文件
'^root’打印以root为开头的文件
'$6!~/^/home/ 第六行不以/home为开头的文件
'$6~/^/home/ 第六行以/home为开头的文件
awk ‘{print FILENAME}’ passwd打印文件名passwd
awk -F : ‘{print $2}’ passwd 以‘:’为分隔符,打印文件passwd的第二列
awk -F : ‘BEGIN{print “hello”}{print $2}’ /etc/passwd | head -n 3 在开头加入hello
awk -F : ‘{print $2}END{print “end”}’ /etc/passwd | tail -n 3 在结尾加入end
awk ‘/^root/’ /etc/passwd
awk ‘/bash$/’ passwd 打印文件passwd以bash结尾的信息
awk -F : ‘/bash$/{print $1}’ passwd 打印以‘:’为分隔符,文件passwd中以bash结尾的第一列信息
[root@localhost shell]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 02:63:8c:d0:9d:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.52.106/16 brd 192.168.255.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::63:8cff:fed0:9d4d/64 scope link
valid_lft forever preferred_lft forever
[root@localhost shell]# ip addr show eth1 | awk -F ' ' 'NR==3{print $2}' | cut -d '/' -f 1
192.168.52.106
awk -F : ‘/nologin$/{print $1}’ /etc/passwd | wc -l 输出以‘:’为分隔符,/etc/passwd文件中nologin结尾的行数。
awk -F : ‘$6~/^/home/{print}’ /etc/passwd 打印文件/etc/passwd中第六行以/home开头的文件
awk -F : ‘$6!~/^/home/{print $1}’ /etc/passwd 打印文件/etc/passwd中第六列不已/home开头的文件的第一列(用户)
awk -F : ‘BEGIN{N=0}$6!~/^/home/{N++}END{print N}’ /etc/passwd打印文件/etc/passwd中第六列不已/home开头的文件的第一列(用户)的数量
编写脚本查看输入设备的ip
#!/bin/bash
[ -z "$1" ] && {
echo "ERROR : please input device following test"
exit
}
ifconfig $1 &> /dev/null || {
echo "$1 is not exist"
exit
}
ifconfig $1|awk -F ' ' '/inet\>/{print $2}'
不加入设备报错
加入不存在设备报错
查看eth0的ip