10 grep,awk,sed三剑客及一大波命令及重要知识考试题讲解
三剑客:
14. grep 三剑客老三 过滤
-v 排除
-A数字 显示grep过滤出的的内容及接下来的几行
-n 给grep找出的行加上行号
-o 显示grep正则每次找到了什么 grep的执行过程
egrep 支持高级正则====grep -E
17. awk 三剑客老大 擅长取列 取行 计算
NR表示行号
$数字 某一列
$0 表示一整行内容
{print显示}
-F指定分隔符或多个分隔符
'NR==2{print $2}'
! 表示取反 排除
awk定位的方法
awk 'NR==1'
awk 'NR==1,NR==10'
awk '//'
18. sed 三剑客老二 取行 替换 修改文件的内容
-n 取消默认输出 一般与p一起使用
-i 修改文件的内容
#查找显示某几行
'10p'
'10,20p'
#替换
's###g'
's@@@g'
'2s#oldboy#oldgirl#gp'
#删除 d===delete
'/找谁/d'
sed -n '1p'
sed -n '1,10p'
sed -n '10,$p'
sed -n '//p'
-----------------------------------------
eg:请执行命令取出linux中eth0的IP地址(cut,awk,sed等方法)
//awk方法解释:
法一:awk+awk+awk
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'|awk -F ":" '{print $2}'
10.0.0.200
法二:awk+awk
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $13}'
10.0.0.200
法三:awk+awk //awk指定多个连续的空格作为分隔符,注意[]+的搭配
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'
10.0.0.200
重点法四:awk
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200
[root@oldboyedu-01 ~]# ifconfig eth0|awk 'NR==2{print $2}' //awk '找谁{干啥}'
addr:10.0.0.200
[root@oldboyedu-01 ~]# ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}' //精简
10.0.0.200
//sed方法解释:
法一:sed+sed+sed
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*addr:##g'
10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*addr:##g'|sed 's# Bca.*$##g'
10.0.0.200 //剪头去尾,贪婪性
法二:sed+sed //sed命令后向引用(反向引用):先把想要的内容通过括号保护起来,然后再使用它
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*addr:##g'
10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*addr:(.*) Bca.*$#\1#g'
10.0.0.200

-----------------------图sed
预备法三:
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'|sed 's#inet#oldboy#g' //等效
oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2s#inet#oldboy#gp'
oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
法三:sed
[root@oldboyedu-01 ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*addr:(.*) Bca.*$#\1#g'
10.0.0.200
[root@oldboyedu-01 ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*) Bca.*$#\1#gp'
10.0.0.200
eg:如何取得/etc/hosts文件的权限对应的数字内容,如:-rw-r--r--为644,要求使用命令取得644或者0644这样的数字。
法一:awk
[root@oldboyedu-01 ~]# stat /etc/hosts
File: `/etc/hosts'
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 260126 Links: 2
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-14 07:45:39.740596669 +0800
Modify: 2017-12-12 08:33:03.234692215 +0800
Change: 2017-12-14 07:33:22.466588257 +0800
[root@oldboyedu-01 ~]# stat /etc/hosts |awk -F "[(/]" 'NR==4'
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
[root@oldboyedu-01 ~]# stat /etc/hosts |awk -F "[(/]" 'NR==4{print $2}'
0755
法二:sed
[root@oldboyedu-01 ~]# stat /etc/hosts |sed -n '4p'
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
[root@oldboyedu-01 ~]# stat /etc/hosts |sed -rn '4s#^.*\(##gp'
0/ root)
[root@oldboyedu-01 ~]# stat /etc/hosts |sed -rn '4s#^.*\([0-9]+##gp'
/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
[root@oldboyedu-01 ~]# stat /etc/hosts |sed -rn '4s#^.*\([0-9]+.*$##gp'
[root@oldboyedu-01 ~]# stat /etc/hosts |sed -rn '4s#^.*\(([0-9]+).*$##gp'
[root@oldboyedu-01 ~]# stat /etc/hosts |sed -rn '4s#^.*\(([0-9]+).*$#\1#gp'
0755
法三:stat命令参数:
[root@oldboyedu-01 ~]# stat -c%a /etc/hosts
755
[root@oldboyedu-01 ~]# stat -c%b /etc/hosts
8
[root@oldboyedu-01 ~]# stat -c%c /etc/hosts
?
eg:三剑客表示排除,比如空行
法一:grep
[root@oldboyedu-01 ~]# grep -n '^$' /oldboy/oldboy.txt
3:
8:
12:
[root@oldboyedu-01 ~]# grep -nv '^$' /oldboy/oldboy.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://www.cnblogs.com/crm
6:our site is http://mooc.study.163.com
7:my qq number is 243110008.
9:not 120000089.
10:my god ,i am not oldboy,but OLDBOY!
11:hello ,i am not oldboy,but oldbey!
法二:awk
[root@oldboyedu-01 ~]# awk '/^$/' /oldboy/oldboy.txt
[root@oldboyedu-01 ~]# awk '!/^$/' /oldboy/oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com
my qq number is 243110008.
not 120000089.
my god ,i am not oldboy,but OLDBOY!
hello ,i am not oldboy,but oldbey!
法三:sed
[root@oldboyedu-01 ~]# sed '/^$/d' /oldboy/oldboy.txt //d; -i真删!
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com
my qq number is 243110008.
not 120000089.
my god ,i am not oldboy,but OLDBOY!
hello ,i am not oldboy,but oldbey!
eg:三剑客表示过滤与定位方法
请用grep 或者egrep正则匹配的方式过滤出前两行内容。
[root@oldboyedu-01 ~]# cat >>/oldboy/ett.txt<<EOF
> oldboy
> olldboooy
> test
> EOF
[root@oldboyedu-01 ~]# cat /oldboy/ett.txt
oldboy
olldboooy
test
//[root@oldboyedu-01 ~]# grep 'oldboy' /oldboy/ett.txt
oldboy
[root@oldboyedu-01 ~]# awk '/oldboy/' /oldboy/ett.txt
oldboy
[root@oldboyedu-01 ~]# sed -n '/oldboy/p' /oldboy/ett.txt
oldboy
法一:
[root@oldboyedu-01 ~]# egrep 'ol+dbo+y' /oldboy/ett.txt
oldboy
olldboooy
[root@oldboyedu-01 ~]# awk '/ol+dbo+y/' /oldboy/ett.txt
oldboy
olldboooy
[root@oldboyedu-01 ~]# sed -n '/ol+dbo+y/p' /oldboy/ett.txt
[root@oldboyedu-01 ~]# sed -nr '/ol+dbo+y/p' /oldboy/ett.txt
oldboy
olldboooy
小结:
1.sed awk如何实现过滤类似grep/egrep
2.awk定位的方法
awk 'NR==1'
awk 'NR==1,NR==10'
awk '//'
3.sed定位
sed -n '1p'
sed -n '1,10p'
sed -n '10,$p'
sed -n '//p'
eg:linux下通过mkdir命令创建一个新目录/alexdir,alexdir的硬链接数是多
少,为什么?2
然后在alexdir下面又创建了一个目录 /alexdir/test,问alexdir的
硬链接数量是多少?3
[root@oldboyedu-01 ~]# mkdir /alexdir
[root@oldboyedu-01 ~]# ls -ald /alexdir/
drwxr-xr-x 2 root root 4096 Dec 14 14:23 /alexdir/
[root@oldboyedu-01 ~]# ls -aldi /alexdir/
282467 drwxr-xr-x 2 root root 4096 Dec 14 14:23 /alexdir/
[root@oldboyedu-01 ~]# ls -aldi /alexdir/ /alexdir/.
282467 drwxr-xr-x 2 root root 4096 Dec 14 14:23 /alexdir/
282467 drwxr-xr-x 2 root root 4096 Dec 14 14:23 /alexdir/.
[root@oldboyedu-01 ~]# mkdir /alexdir/test
[root@oldboyedu-01 ~]# ls -aldi /alexdir/ /alexdir/. /alexdir/test/..
282467 drwxr-xr-x 3 root root 4096 Dec 14 14:25 /alexdir/
282467 drwxr-xr-x 3 root root 4096 Dec 14 14:25 /alexdir/.
282467 drwxr-xr-x 3 root root 4096 Dec 14 14:25 /alexdir/test/..
eg:请给出默认情况eth0网卡配置文件的路径及客户端DNS的路径。
/etc/sysconfig/network-scripts/ifcfg-eth0
/配置/系统配置/网络-脚本/if(c f g)-eth0
DNS的配置
1./etc/resolv.conf
2.网卡配置文件里面的DNS项(优先)
eg:查找当前目录下所有文件,并把文件中的www.etiantian.org字符串替换成
www.oldboyedu.com
假设现在在/oldboy
法一:
[root@oldboyedu-01 ~]# find /oldboy/ -type f -name "*.txt"
/oldboy/oldboy.txt
/oldboy/ett.txt
[root@oldboyedu-01 ~]# find /oldboy/ -type f -name "*.txt"|xargs sed 's#www.etiantian.org#www.oldboyedu.com#g'
法二预备:
[root@oldboyedu-01 ~]# ls -l `which mkdir`
-rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir
[root@oldboyedu-01 ~]# ls -l $(which mkdir)
-rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir
法二:
[root@oldboyedu-01 ~]# sed 's#www.etiantian.org#www.oldboyedu.com#g' $(find /oldboy/ -type f -name "*.txt") //此处存放find命令的结果。
法三预备:
[root@oldboyedu-01 ~]# find /oldboy/ -type f -name "*.txt" -exec ls -l {} \;
-rw-r--r-- 1 root oldboy 283 Dec 14 03:50 /oldboy/oldboy.txt
-rw-r--r-- 1 root root 40 Dec 14 15:42 /oldboy/ett.txt
法三:
[root@oldboyedu-01 ~]# find /oldboy/ -type f -name "*.txt" -exec sed 's#www.etiantian.org#www.oldboyedu.com#g' {} \;
eg:请问在一个命令上加什么参数可以实现下⾯面命令的内容在同一行输出。
echo "oldboy";echo "oldboy"
; ====分号表示分隔多条命令
root@oldboyedu-01 ~]# echo "oldboy";echo "oldgirl"
oldboy
oldgirl
[root@oldboyedu-01 ~]# echo -n "oldboy";echo "oldgirl" //-n换行
oldboyoldgirl
[root@oldboyedu-01 ~]# echo -n "oldboy";echo -n "oldgirl"
[root@oldboyedu-01 ~]# echo "old\nboy"
old\nboy
[root@oldboyedu-01 ~]# echo -e "old\nboy" //-e解析\n
old
boy
[root@oldboyedu-01 ~]# echo -e "old\n\tboy"
old
boy
[root@oldboyedu-01 ~]# cat echo.txt
a
b
c
[root@oldboyedu-01 ~]# cat -n echo.txt
1 a
2 b
3 c
[root@oldboyedu-01 ~]# cat -A echo.txt
a$
b$
^Ic$
date命令及修改时间:
[root@oldboyedu-01 ~]# date
Thu Dec 14 16:19:52 CST 2017
[root@oldboyedu-01 ~]# date +%F //
2017-12-14
[root@oldboyedu-01 ~]# date +%Y-%m-%d //年月日
2017-12-14
[root@oldboyedu-01 ~]# date +%w
4
[root@oldboyedu-01 ~]# date +%Y-%m-%d_%w
2017-12-14_4
[root@oldboyedu-01 ~]# date +%T //
16:23:45
[root@oldboyedu-01 ~]# date +%H:%M:%S //时分秒
16:23:46
[root@oldboyedu-01 ~]# date -d "1day" //一天以后
Fri Dec 15 16:25:29 CST 2017
[root@oldboyedu-01 ~]# date -d "+1day" //一天以后
Fri Dec 15 16:25:31 CST 2017
[root@oldboyedu-01 ~]# date -d "+2day"
Sat Dec 16 16:25:34 CST 2017
[root@oldboyedu-01 ~]# date -d "-1day" //一天以前
Wed Dec 13 16:25:39 CST 2017
[root@oldboyedu-01 ~]# date -d "+1day" +%F
2017-12-15
[root@oldboyedu-01 ~]# date -d "+2day" +%F
2017-12-16
//修改时间:
[root@oldboyedu-01 ~]# date -s "20171230 15:15:00"
Sat Dec 30 15:15:00 CST 2017
[root@oldboyedu-01 ~]# date
Sat Dec 30 15:15:06 CST 2017
[root@oldboyedu-01 ~]# date -s "1hour" //调整时间
Sat Dec 30 16:16:10 CST 2017
//自动修改系统时间:
时间服务器:
pool.ntp.org
ntp1.aliyun.com
[root@oldboyedu-01 ~]# date
Sat Dec 30 16:18:15 CST 2017
[root@oldboyedu-01 ~]# ntpdate pool.ntp.org
30 Dec 15:19:06 ntpdate[42109]: step time server 120.25.115.20 offset -3565.828206 sec //表示修改时间成功
[root@oldboyedu-01 ~]# date
Sat Dec 30 15:19:08 CST 2017
环境变量之PATH:
问题:【Centos 5.x】当从root用户切到普通用户oldboy时,执行ifconfig会提示。
command not found.
Linux运行命令过程:
输入命令
linux会在PATH里面进行查找
运行
报错
//临时修改、添加环境变量:
[root@oldboyedu-01 ~]# echo $PATH
/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu-01 ~]# export PATH=/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu-01 ~]# echo $PATH
/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
//永久修改:
[root@oldboyedu-01 ~]# echo "export PATH=/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin" >>/etc/profile
[root@oldboyedu-01 ~]# source /etc/profile
eg:请描述下列路径的内容是做什么的?
/var/log/messages //系统默认的日志
/var/log/secure //用户的登录信息
/etc/fstab //开机的时候自动挂载列表,在开机的时候每个磁盘分区对应着什么入口的列表
/etc/profile //配置环境变量,别名
/var/spool/cron/root //定时任务的配置文件
/etc/hosts //解析主机名--->IP的过程
DNS // 域名 --->IP的过程
eg:查找命令的绝对路径:
法一:which
[root@oldboyedu-01 ~]# which mkdir
/bin/mkdir
法二:find
[root@oldboyedu-01 ~]# find / -type f -name "mkdir"
/bin/mkdir
法三:whereis
[root@oldboyedu-01 ~]# whereis mkdir //找出命令相关的,帮助,man等,用的不多
mkdir: /bin/mkdir /usr/share/man/man2/mkdir.2.gz /usr/share/man/man3p/mkdir.3p.gz /usr/share/man/man1p/mkdir.1p.gz /usr/share/man/man1/mkdir.1.gz
[root@oldboyedu-01 ~]# whereis -b mkdir //过滤出二进制文件
mkdir: /bin/mkdir
法四:locate
oot@oldboyedu-01 ~]# locate mkdir //根据名字找出文件的路径,文件路径与文件表格 数据库;找出包含的一堆
/bin/mkdir
/opt/mysql-5.5.32/mysys/my_mkdir.c
/opt/mysql-5.5.32/mysys/CMakeFiles/mysys.dir/my_mkdir.c.o
[root@oldboyedu-01 ~]# updatedb
eg:查询系统中在线用户:
用户在线=====<远程连接>到服务器的用户。
远程登录的用户=====通过xshell或SecureCRT连接服务器。
法一:
[root@oldboyedu-01 ~]# w
17:08:37 up 2 days, 10:00, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 13Dec17 16days 0.28s 0.28s -bash //-表本地登录
root pts/3 10.0.0.1 14Dec17 1.00s 3.52s 1.28s w
远程登陆的用户 从哪里登录 何时连入系统 系统的负载 这个用户在干啥
说明:
系统的负载:系统的繁忙程度。若系统负载接近服务器CPU的核心总数就算是负载高。
[root@oldboyedu-01 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
法二:
[root@oldboyedu-01 ~]# last //谁在什么时间连接到了系统,连接了多久。
root pts/3 10.0.0.1 Thu Dec 14 15:39 still logged in
root pts/2 10.0.0.1 Thu Dec 14 13:57 - 16:09 (16+02:12)
root pts/1 10.0.0.1 Thu Dec 14 11:42 - 16:06 (04:24)
root pts/1 10.0.0.1 Thu Dec 14 09:26 - 11:23 (01:57)
root pts/2 10.0.0.1 Thu Dec 14 08:51 - 11:23 (02:31)
......
法三:
[root@oldboyedu-01 ~]# lastlog //显示系统中所有用户的最近一次的登录信息。
Username Port From Latest
root pts/3 10.0.0.1 Thu Dec 14 15:39:50 +0800 2017
bin **Never logged in**
daemon **Never logged in**
......
正确的关机和重启服务器的命令:
重启:
[root@oldboyedu-01 ~]# #init 6 //不要用
[root@oldboyedu-01 ~]# shutdown -r now //=== reboot
[root@oldboyedu-01 ~]# shutdown -r 1 //默认1min后重启
Broadcast message from root@oldboyedu-01
(/dev/pts/3) at 17:32 ...
The system is going down for reboot in 1 minute!
^Cshutdown: Shutdown cancelled
在另外一个端口执行:
[root@oldboyedu-01 ~]# shutdown -c //把正在关机或者重启命令取消
关机:
[root@oldboyedu-01 ~]# #init 0
[root@oldboyedu-01 ~]# #poweroff
[root@oldboyedu-01 ~]# #halt //需要手动关闭电源
[root@oldboyedu-01 ~]# #shutdown -h now
[root@oldboyedu-01 ~]# #shutdown -h 1
eg:请写出下面linux命令行快捷键的功能?
Ctrl + a 把光标移动到《行首》
Ctrl + e 把光标移动到《行尾》
Ctrl + c 取消当前的操作 cancel
Ctrl + d logout命令(当前行没有任何内容,退出当前用户)
Ctrl + l (小写字母L) 清除屏幕内容 clear
Ctrl + u 剪切光标所在位置到行首的内容
Ctrl + k 剪切光标所在位置到行尾的内容
ctrl + y 粘贴
ctrl + → 把光标向右移动一个单词
ctrl + ← 把光标向左移动一个单词
history |grep awk
Ctrl + r search 搜索历史命令,继续搜索
linux快捷键练习:
#命令行输入oldboyedu
#然后让光标移动到行首 加上注释符号和I am studying
#然后让光标移动到行尾,加上 linux.site:www.oldboyedu.com;
#剪切,这一行内容。
#粘贴3次。
eg:vi/vim快捷键初级
移动光标:
↑k
←h →l
↓j
两边左右hl 中间是上下
移动到文件的第一行 gg :1 1G
移动到文件的最后一行 G :$
快速到达文件的第100行 100gg 100G :100
移动光标到行首 0 ^
移动光标到行尾 $
编辑:
在当前行下一行插入一个空行并进入到编辑模式 o(小写字母O)
剪切光标所在位置到行尾的内容,然后进入编辑模式 C(大写字母C)
删除当前行的内容到行尾 dG
撤销上一次的操作 u
恢复上一次的操作 ctrl+r
复制粘贴剪切:
删除光标所在位置的内容到行尾 D
复制当前行 yy
剪切(删除)当前行 dd
粘贴 p
搜索:
/你要找的内容 继续向下搜索n 继续向上搜索N
vim查询帮助
:h :wq
:h G
浙公网安备 33010602011771号