Linux之特殊符号与正则表达式
Linux中常用的特殊符号
'' 所见即所得,吃啥吐啥
"" 特殊符号会被解析运行
`` ==== $() 先运行里面的命令 把结果留下 > 重定向符号 先清空文件的内容 然后追加文件的最后
>> 追加重定向 追加文件的最后
> 错误重定向 只有错误的信息 才会通过这个漏洞进入文件中
>> 错误追加重定向 ~ 当前用户的家目录
root ~ /root
oldboy ~ /home/oldboy
! 查找并运行历史命令
!awk 包含awk的命令 最近的一条运行
history |grep awk
# 注释
root用户的命令提示符 $ 取出变量的内容
awk $取某一列的内容
普通用户的命令提示符
* 所有 任何东西
\ 撬棍 转义字符 && 前一个命令执行成功然后在执行后一个命令
ifdown eth0 && ifup eth0 || 前一个命令支持失败了再执行后面的命令
通配符
通配符是用来查找文件的。如:‘*.txt’ 表示匹配所有以 . txt结尾的文件
##1. * 所有,任意
找出文件名包含oldboy的文件
mkdir -p /oldboy
cd /oldboy
touch oldboy.txt oldboy oldboyfile oldboy.awk eduoldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "oldboy"
/oldboy/oldboy
[root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy"
/oldboy/oldboy
/oldboy/eduoldboy
[root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy*"
/oldboy/oldboyfile
/oldboy/oldboy.txt-hard
/oldboy/oldboy.awk
/oldboy/oldboy.txt
/oldboy/oldboy
/oldboy/eduoldboy ##2. {} 生成序列
[root@oldboyedu01-nb oldboy]# echo {1..6}
1 2 3 4 5 6
[root@oldboyedu01-nb oldboy]# echo {1..10}
1 2 3 4 5 6 7 8 9 10 [root@oldboyedu01-nb oldboy]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboyedu01-nb oldboy]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboyedu01-nb oldboy]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu01-nb oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboyedu01-nb oldboy]# echo 20{01..10}
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# echo {1,9,20}
1 9 20 #通过{}进行备份
[root@oldboyedu01-nb oldboy]# echo A{B,C}
AB AC
[root@oldboyedu01-nb oldboy]# echo A{,C}
A AC
[root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu01-nb oldboy]# touch oldboy.txt
[root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak}
[root@oldboyedu01-nb oldboy]# ls -l oldboy.txt*
-rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt
-rw-r--r-- 1 root root 29 Oct 18 07:42 oldboy.txt.bak
-rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt-hard
lrwxrwxrwx 1 root root 10 Oct 17 09:27 oldboy.txt-soft -> oldboy.txt
[root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak}
[root@oldboyedu01-nb oldboy]# #cp oldboy.txt{,.bak}
[root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu01-nb oldboy]# echo A{,B}
A AB
正则表达式
1)什么是正则?为何使用它?
通过符号表示文字内容。 提高效率,省事。
支持正则表达式:Linux三剑客 grep sed awk 2)使用正则的时候注意事项
#1] 正则表达式是按照行进行处理的
#2] 禁止使用中文符号
#3] 给grep和egrep配置别名
cat >>/etc/profile<<EOF
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
EOF source /etc/profile
正则与统配符的区别
用途 匹配的内容 支持的命令
通配符---用来匹配查找文件名 *.txt *.log 以.txt .log结尾的文件 大部分命令都可以使用
正则-----在文件中匹配查找内容 包含oldboy的行 Linux三剑客
正则表达式的分类
名称 符号 命令
基础正则(basic regular expression BRE) ^ $ . * [] [^] grep sed awk 扩展正则(extended regular expression ERE) | + {} () ? grep -E/egrep sed -r awk
基础正则
准备测试环境
I am oldboy teacher!
I teach linux. I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448. not 4900000448.
my god ,i am not oldbey,but OLDBOY!
#1]. ^ 以....开头的行
[root@oldboyedu01-nb oldboy]# grep '^m' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY! #2]. $ 以....结尾的行
[root@oldboyedu01-nb oldboy]# grep 'm$' oldboy.txt
my blog is http://oldboy.blog.51cto.com #3]. ^$ 空行 这一行中没有任何的符号
[root@oldboyedu01-nb oldboy]# grep -n '^$' oldboy.txt
3:
8: 排除文件中的空行
[root@oldboyedu01-nb oldboy]# grep -v '^$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY! #4]. .(点) 任意一个字符 不包含空行
#-o 表示grep的执行过程 正则每次匹配到了什么? 找出文件中以点结尾的行
[root@oldboyedu01-nb oldboy]# grep '.$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
因为 . 是正则符号,所以并没有匹配出我们需要的内容。我们需要使用\将其转义
#5]. \(撬棍) 转义符号 脱掉马甲,打回原形
[root@oldboyedu01-nb oldboy]# grep '\.$' oldboy.txt
I teach linux.
my qq num is 49000448.
# \n 表示回车换行 #6]. * 前一个字符连续出现了0次或1次以上 >=0
A
AA
AAA
AAAA
[root@oldboyedu01-nb oldboy]# grep '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# grep -o '0' oldboy.txt
0
0
0
0
0
0
0
0 [root@oldboyedu01-nb oldboy]# grep '0*' oldboy.txt
I am oldboy teacher!
I teach linux. I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448. not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# grep -o '0*' oldboy.txt
000
00000 Linux正则表达式之问题1.
为何会取出000 而不是 00 和0 0 0 0
#因为正则在表示 连续出现的时候表现出贪婪性 有多少吃多少 有多少匹配多少 Linux正则表达式之问题2.
为何使用'0*' 会把整个文件的内容都显示出来
#A*表示
# 连续出现了0次A ====>相当于什么也没有,就像是在匹配 ‘ ’ 。因此就会把整个文件的内容都显示出来
# A连续出现了1次以上 A
# 小结:
什么是连续出现
-o的使用 #7]. .* 所有字符 所有符号 所有
#正则中表示连续出现 或 所有的时候 贪婪性 有多少匹配多少
找出文件中以m开头的行并且以m结尾的行
[root@oldboyedu01-nb oldboy]# grep '^m.*m$' oldboy.txt
my blog is http://oldboy.blog.51cto.com #8]. [] 中括号 [abc] 相当于是一个字符 找出包含a或b或c的行 [root@oldboyedu01-nb oldboy]# grep '[abc]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu01-nb oldboy]# grep -on '[abc]' oldboy.txt
1:a
1:b
1:a
1:c
2:a
2:c grep '[a-z]' oldboy.txt
grep '[A-Z]' oldboy.txt
grep '[0-9]' oldboy.txt
grep '[a-zA-Z0-9]' oldboy.txt 练习3:以 m或n或o开头的 并且以 m或g 结尾的行
[root@oldboyedu01-nb oldboy]# grep '^[mno].*[mg]$' oldboy.txt
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org [root@oldboyedu01-nb oldboy]# grep '[m,n,o]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY! #9]. [^] [^abc] 排除a或b或c的内容
[root@oldboyedu01-nb oldboy]# grep '[^abc]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
#10].基础正则小结
##1)) ^ $ ^$ . * .* [] [^]
##2)) grep grep -o
扩展正则
+ | () {} ?
#1]. +前一个符号连续出现了1次或多次 ,贪婪匹配,尽可能多的匹配
[root@oldboyedu01-nb oldboy]# egrep '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '0+' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '0+' oldboy.txt -o
000
00000
[root@oldboyedu01-nb oldboy]# egrep '0' oldboy.txt -o
0
0
0
0
0
0
0
0
符号 + 的应用
#把文件中连续出现的小写字母取出来
#1.取出小写字母
[root@oldboyedu01-nb oldboy]# egrep '[a-z]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY! #2.连续出现的小写字母
[root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY! #3.只保留连续出现的小写字母
[root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt -o
am
oldboy
teacher
teach
linux
like
badminton
ball
billiard
ball
and
chinese
chess
my
blog
is
http
oldboy
blog
cto
com
our
site
is
http
www
etiantian
org
my
num
is
not
my
god
i
am
not
oldbey
but 小结:
1.可以把连续的东西通过正则取出来
2.一般与[]配合 #2]. | 或者 [root@oldboyedu01-nb oldboy]# egrep 'oldboy|linux' oldboy.txt
I am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com Linux正则表达式之问题3:[] 与 | 区别 都可以表示或者 [abc] a|b|c
区别:
1.[]基础正则 |扩展正则
2.[]表示的是单个字符或者 |单个字符的或多个字符的都可
[a-z] oldboy|linux #3]. () 括号中的内容相当于是一个整体 后向引用(反向引用)
[root@oldboyedu01-nb oldboy]# egrep 'oldb(o|e)y' oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY! 先乘除再加减,有括号的先算括号里面的。 #后向引用,反向引用,一般是在sed命令中使用
sed,把你想要的内容先保护起来(通过小括号),然后再使用他。
实例:需求,我要把123456用<>包起来
[root@oldboyedu01-nb oldboy]# echo '<123456>' 当然不是这种玩赖的做法
<123456>
[root@oldboyedu01-nb oldboy]# echo 123456|sed 's#(.*)#\1#g' 注意:\1 表示第一个小括号
sed: -e expression #1, char 11: invalid reference \1 on `s' command's RHS
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#\1#g'
123456
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1#g'
<123456
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\1#g'
2
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\2#g'
5
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.).(.)(.).#\3#g'
5
#4]. o{n,m} 前一个字符连续出现了至少n次,最多m次。
o{n} 前一个字符连续出现了n次
o{n,} 前一个字符连续出现了至少n次 o{,m} 前一个字符连续出现了最多m次 [root@oldboyedu01-nb oldboy]# egrep '0{1,4}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep -o '0{1,4}' oldboy.txt
000
0000
0
[root@oldboyedu01-nb oldboy]# egrep '0{3,4}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '0{3,4}' oldboy.txt -o
000
0000 [root@oldboyedu01-nb oldboy]# egrep '0{3,}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '0{3,}' oldboy.txt -o
000
00000 [root@oldboyedu01-nb oldboy]# egrep '0{3}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '0{3}' oldboy.txt -o
000
000 [root@oldboyedu01-nb oldboy]# egrep '[0-9]' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt -o
49000448
4900000448 #5]. ? 表示前一个字符连续出现0次或1次
gd
good
god
gooood [root@oldboyedu01-nb oldboy]# egrep 'gd|god' li.log
gd
god
[root@oldboyedu01-nb oldboy]# egrep 'go?d' li.log
gd
god
[root@oldboyedu01-nb oldboy]# egrep 'go*d' li.log
gd
good
god
gooood
正则总结
# 1、正则符号
连续出现(重复)
* >=0 0次或者多次
+ >=1 1次以上
? 0 1 0次或者1次
{n,m} >=n <=m 至少n次,最多m次
{n} ==n 取n次
其他
. 任意一个字符
[abc] 一个整体 相当于是一个字符a或者b或者c
[a-z] [0-9] [A-Z]
[^abc] 排除
| 或者
() 后向引用 反向引用 先保护再使用
^ 以什么什么开头
$ 以什么什么结尾
.* 所有
^$ 空行 #2、基础正则与扩展正则区别:
支持基础正则 基础+扩展
grep egrep === grep -E
sed sed -r
awk awk
使用撬棍\ 也可以命令支持扩展正则(一般不用,遇到稍微复杂的会很麻烦)
[root@luffy-01 oldboy]# grep 'god\|gd' alex.txt
gd
god #3、查询帮助:
man grep(简单的帮助)
查看详细的帮助信息info grep
练习题
过滤文本(awk、sed)
1、请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)
思路
1.定位-取出第2行
2.取出你要的ip地址 方法1-awk方法+awk+awk
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'|awk -F":" '{print $2}'
10.0.0.200 方法2-awk+awk
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $4}' [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $11}'
inet
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $13}'
10.0.0.200
#遇到空格便切,前面有10个空格,切了10刀才遇到第一个非空格,太费劲了
#下面使用不费劲的方法,用+匹配(一个或者多个)
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'
10.0.0.200 ##理解连续出现 理解 [] +
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2'
######1@@@@@@@@2
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]'
######1@@@@@@@@2
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]' -o
#
#
#
#
#
#
@
@
@
@
@
@
@
@
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+'
######1@@@@@@@@2
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+' -o
######
@@@@@@@@
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $2}'
1
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $3}'
2 方法3-awk #预备姿势-通过awk取出 ifconfig eth0 结果中的 第二行的第二列
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2{print $2}'
addr:10.0.0.200
[root@oldboyedu01-nb ~]# #awk '找谁{干啥}' #最终结果
[root@oldboyedu01-nb ~]# ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}'
10.0.0.200 方法4-sed+sed+sed
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*:##g'
255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'
10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's# Bc.*$##g'
10.0.0.200 方法5-sed命令的后向引用 ******
#原则-先把你想要的内容保护起来,然后在后面使用
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:##g'
10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*) Bc.*$#\1#g'
10.0.0.200 方法6-sed
#预备姿势-ifconfig eth0第二行的inet替换为oldboy
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu01-nb ~]# 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@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2s#inet#oldboy#gp'
oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
#最终结果-
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp'
10.0.0.200 小结:
1.理解第2 3 5方法
2.了解6
3.awk指定多个连续的分隔符,sed的反向引用
2、如何取得/etc/hosts文件的权限对应的数字内容,如-rw-r--r-- 为644,要求使用命令取得644或0644这样的数字。
#方法1-awk
[root@oldboyedu01-nb ~]# stat /etc/hosts |awk 'NR==4'
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |awk -F "[(/]" 'NR==4{print $2}'
0644 #方法2-sed
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -n '4p'
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(##gp'
0/ root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\([0-9]+##gp'
/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(([0-9]+).*$#\1#gp'
0644 #方法3-stat命令的参数
[root@oldboyedu01-nb ~]# stat -c%a /etc/hosts
644 小结:
1.sed 反向引用 awk方法指定分隔符
3、已知/oldboy/test.txt 文件内容为:
oldboy
youxiaodao
pizza
请问如何把文件中的空行过滤掉(要求命令行实现)
#方法1-grep -v表示排除
[root@oldboyedu01-nb oldboy]# grep '^$' test.txt [root@oldboyedu01-nb oldboy]# grep -n '^$' test.txt
2:
4:
[root@oldboyedu01-nb oldboy]# grep -v '^$' test.txt
oldboy
xizi
xiaochao #方法2-awk
[root@oldboyedu01-nb oldboy]# awk '/^$/' test.txt
[root@oldboyedu01-nb oldboy]# awk '不要/^$/' test.txt
awk: 不要/^$/
awk: ^ invalid char '⥠in expression
! 表示排除
[root@oldboyedu01-nb oldboy]# awk '!/^$/' test.txt
oldboy
xizi
xiaochao
[root@oldboyedu01-nb oldboy]## awk '不要/空行/' test.txt #方法3-sed-删除
[root@oldboyedu01-nb oldboy]# sed '/^$/d' test.txt
oldboy
xizi
xiaochao 小结:
1.通awk sed表示排除
2.awk !
3.sed d
4、已知/oldboy/ett.txt 文件内容为:
oldboy
pizzzzza
test
请使用grep或者egrep 正则匹配的方式过滤出前两行内容
#如何通过-sed awk 实现过滤 === grep/egrep
[root@oldboyedu01-nb oldboy]# cat ett.txt
oldboy
olldboooy
test
[root@oldboyedu01-nb oldboy]# egrep 'oldboy' ett.txt
oldboy
[root@oldboyedu01-nb oldboy]# awk '/oldboy/' ett.txt
oldboy
[root@oldboyedu01-nb oldboy]# sed -n '/oldboy/p' ett.txt
oldboy
题目答案:
[root@oldboyedu01-nb oldboy]# egrep 'ol+dbo+y' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldboy]# awk '/ol+dbo+y/' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldboy]# sed -n '/ol+dbo+y/p' ett.txt
[root@oldboyedu01-nb oldboy]# sed -nr '/ol+dbo+y/p' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldb 小结:
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'
文件
5、linux下通过mkdir命令创建一个新目录/alexdir,alexdir的硬链接数是多少,为什么?
然后在alexdir下面又创建了一个目录 /alexdir/test,问alexdir的硬链接数量是多少?
[root@luffy-01 oldboy]# mkdir /alexdir
[root@luffy-01 oldboy]# ll /|grep alex
drwxr-xr-x 2 root root 4096 Jan 15 15:21 alexdir
[root@luffy-01 oldboy]# mkdir /alexdir/test
[root@luffy-01 oldboy]# ll /|grep alex
drwxr-xr-x 3 root root 4096 Jan 15 15:21 alexdir
查看一下:
[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/.
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.
2个文件的inode是一样的。在当我们使用 cd . 的时候,也是进入了这个文件夹
创建之后,查看,果然是3个一样的inode
[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/. /alexdir/test/..
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/test/..
6、请给出默认情况eth0网卡配置文件的路径及客户端DNS的路径。
/etc/sysconfig/network-scripts/ifcfg-eth0
/配置/系统配置/网络-脚本/if(c f g)-eth0
DNS的配置
1./etc/resolv.conf
2.网卡配置文件
3.网卡配置文件里面的DNS优先
替换
7、查找当前目录下所有文件,并把文件中的www.etiantian.org字符串替换成www.oldboyedu.com
假设现在在/oldboy
find /oldboy -type f -name "*.txt" #方法1
find /oldboy -type f -name "*.txt"|xargs sed 's#www.etiantian.org#www.oldboyedu.com#g'
(管道|什么时候用xargs,什么时候不用呢?)
#方法2
##预备姿势
[root@oldboyedu01-nb ~]# #ls -l 此处存放着 which mkdir命令的结果
[root@oldboyedu01-nb ~]# #ls -l which mkdir
[root@oldboyedu01-nb ~]# #ls -l $(which mkdir)
[root@oldboyedu01-nb ~]# #ls -l `which mkdir`
[root@oldboyedu01-nb ~]# ls -l `which mkdir`
-rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir
[root@oldboyedu01-nb ~]# ls -l $(which mkdir)
-rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir
##最终结果
sed 's#www.etiantian.org#www.oldboyedu.com#g' 此处存放着find命令的结果
sed 's#www.etiantian.org#www.oldboyedu.com#g' $(find /oldboy -type f -name "*.txt") #方法3
find /oldboy -type f -name "*.txt" -exec ls -l {} \;
-exec 是 find的参数,{}接受前面find命令的结果
一个故障实例(被植入js)
7.1有一个实际是这样的,情况是:一个lamp的服务器,站点目录下的所有文件军备植入了js代码,导致网站打开时就会调用这个地址,显示广告,造成很恶劣的影响,
解决方案:
#1、运营、网站用户发现弹窗广告
#2、运营报告给开发,开发联系运维,共同解决
#3、开发发现的问题就是,站点的目录都被植入了js代码
#4、运维人员解决问题:
## 1)运维备份原始出问题的原始文件
## 2)历史备份覆盖
## 3)find+sed覆盖
#5、仔细查看日志,寻找问题发现根源
#6、提供盲羊补牢解决方案(站点目录严格权限规划方案,以及新上线发布规范思路)
echo的参数使用
8、请问在一个命令上加什么参数可以实现下面命令的内容在同一行输出。
echo "oldboy";echo "oldboy"
# ; ====>分号表示分隔多条命令
ls;pwd;hello [root@oldboyedu01-nb ~]# echo -n "oldboy";echo "oldboy"
oldboyoldboy
# -n 表示取消输出每一行结尾的换行符号 [root@oldboyedu01-nb ~]# echo -e "a\nb"
a
b
# echo命令的-e参数,就是让echo支持\n \t
[root@oldboyedu01-nb ~]# echo -e "a\nb\n\tc" >echo.txt
[root@oldboyedu01-nb ~]# cat echo.txt
a
b
c
# -A显示文件中的特殊符号
[root@oldboyedu01-nb ~]# cat -A echo.txt
a$
b$
^Ic$
时间命令
9、请给出如下格式的date命令,例:11-02-26。再给出实现按周输出 比如:周六输出为6,请分别给出命令。
date命令的使用
[root@oldboyedu01-nb ~]# date
Fri Oct 20 05:20:30 CST 2017
[root@oldboyedu01-nb ~]# #2017-11-11
[root@oldboyedu01-nb ~]# #date +格式
[root@oldboyedu01-nb ~]# date +%F
2017-10-20
[root@oldboyedu01-nb ~]# date +%Y-%m-%d
2017-10-20
[root@oldboyedu01-nb ~]# date +%w
5
[root@oldboyedu01-nb ~]# #显示当前的日期以年-月-日_周几 [root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5 [root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5
[root@oldboyedu01-nb ~]# date +%T
05:25:33
[root@oldboyedu01-nb ~]# date +%H:%M:%S
05:25:51 date命令按照格式显示日期小结:
1.date +格式
2.%F ===> %Y-%m-%d 年-月-日
%T ===> %H:%M:%S 时:分:秒
%w ===> 周几
10、扩展问题:打印三天前的日期,格式如:2088-08-28
如何显示指定日期:使用-d参数
[root@oldboyedu01-nb ~]# date
Fri Oct 20 05:28:44 CST 2017
[root@oldboyedu01-nb ~]# date -d "1day" 显示1天后的日期
Sat Oct 21 05:29:07 CST 2017
[root@oldboyedu01-nb ~]# date -d "+1day" 显示一天后
Sat Oct 21 05:29:18 CST 2017
[root@oldboyedu01-nb ~]# date -d "-1day" 显示前一天
Thu Oct 19 05:29:42 CST 2017 [root@oldboyedu01-nb ~]# date -d "-1day" +%F 也可以制定显示格式
2017-10-19
[root@oldboyedu01-nb ~]# date -d "1day" +%F
2017-10-21
[root@oldboyedu01-nb ~]# #year month day hour min sec 格式顺序 #显示7天前的时间按照格式年-月-日_周几
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5
[root@oldboyedu01-nb ~]# date +%F_%w -d "-7day"
2017-10-13_5
修改系统日期:使用-s参数
[root@oldboyedu01-nb ~]# date -s "21111111 11:11:11"
Wed Nov 11 11:11:11 CST 2111
[root@oldboyedu01-nb ~]# date -s "1hour" 把当前系统时间往后添加一个小时
Wed Nov 11 12:12:51 CST 2111
[root@oldboyedu01-nb ~]# date -s "-1hour"
Wed Nov 11 11:12:56 CST 2111
利用时间服务器,自动修改系统时间
时间服务器
pool.ntp.org
ntp1.aliyun.com [root@luffy-01 oldboy]# ntpdate pool.ntp.org
PATH环境变量
11、【Centos 5.x】当从root用户切到普通用户pizza时,执行ifconfig会提示。command not found.
1、Linux运行命令过程
输入命令
linux会在PATH里面进行查找
运行
报错 2、PATH环境变量 修改PATH环境变量
##临时
[root@oldboyedu01-nb ~]# export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu01-nb ~]#[root@oldboyedu01-nb ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin ##永久
把环境变量的配置命令追加到/etc/profile中
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin ##生效
source /etc/profile 小结:
1.什么是PATH环境变量
2.如何修改PATH环境变量
文件
12、请描述下列路径的内容是做什么的?
/var/log/messages 系统默认的日志
/var/log/secure 用户的登录信息
/etc/fstab 开机的时候自动挂载列表 在开机的时候每个磁盘分区对应着什么入口的列表
/etc/profile 配置环境变量 别名
/var/spool/cron/root 定时任务的配置文件
/etc/hosts 解析主机名
/etc/hosts 主机名---->ip地址
DNS解析 域名---> ip过程
13、如何快速查到ifconfig的全路径,请给出命令。
####方法1 which (在PATH环境变量)
[root@oldboyedu01-nb ~]# which mkdir
/bin/mkdir
[root@oldboyedu01-nb ~]# which sed
/bin/sed ####方法2 find
[root@oldboyedu01-nb ~]# find / -type f -name "gawk"
/bin/gawk
[root@oldboyedu01-nb ~]# find / -type f -name "sed"
/bin/sed
[root@oldboyedu01-nb ~]# find / -type f -name "mkdir"
/bin/mkdir ####方法3 whereis 找出命令相关的 帮助 man ,所以会很多
[root@oldboyedu01-nb ~]# whereis sed
sed: /bin/sed /usr/share/man/man1p/sed.1p.gz /usr/share/man/man1/sed.1.gz
[root@oldboyedu01-nb ~]# whereis awk
awk: /bin/awk /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1p/awk.1p.gz /usr/share/man/man1/awk.1.gz
[root@luffy-01 ~]# whereis -b sed 使用-b参数,得到的只是二进制文件
sed: /bin/sed
####方法4 locate 根据名字 找出文件的路径
根据文件名字与文件路径表格(数据库) 查找,一般不使用,因为使用它会去查询数据库,导致磁盘空间紧张
updatedb 跟新数据库
[root@oldboyedu01-nb ~]# touch oldboy-20171111.log
[root@oldboyedu01-nb ~]# locate 20171111 刚刚建立的文件没有,跟新一下,才能查找到
[root@oldboyedu01-nb ~]# updatedb
[root@oldboyedu01-nb ~]# locate 20171111
/root/oldboy-20171111.log
查询Linux在线用户
14、请给出查看当前哪些用户在线的linux命令。
用户在线是什么意思呢 =====> 远程连接到服务器的用户
远程登录的用户=====通过xshell或SecureCRT连接服务器
方式一:w
[root@luffy-01 ~]# w
17:40:11 up 8:58(累计已开机时间), 2 users, load average(平均负载): 0.00, 0.00, 0.00 load average(平均负载)
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
pizza tty1 -(代表本地) 08:44 08:53 0.09s 0.09s -bash
root pts/0 10.0.0.1 11:31 0.00s 0.02s 0.00s w
root pts/1 10.0.0.1 11:55 3:35 0.00s 0.00s -bash
root pts/2 10.0.0.1 11:55 12.00s 0.01s 0.01s -bash
远程登录的用户 从哪里登录的 什么时候连接入系统 这个用户在做什么
系统的负载---系统繁忙程度
如果负载接近-服务cpu的核心总数
[root@luffy-01 ~]# cat /proc/cpuinfo 查看CPU信息
processor : 0
vendor_id : AuthenticAMD
cpu family : 21
model : 16
model name : AMD Athlon(tm) X4 730 Quad Core Processor
stepping : 1
cpu MHz : 2800.099
cache size : 2048 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc up rep_good tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw xop fma4 tbm bmi1
bogomips : 5600.19
TLB size : 1536 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:
[root@luffy-01 ~]# lscpu 查看cpu信息
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
Vendor ID: AuthenticAMD
CPU family: 21
Model: 16
Model name: AMD Athlon(tm) X4 730 Quad Core Processor
Stepping: 1
CPU MHz: 2800.099
BogoMIPS: 5600.19
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 16K
L1i cache: 64K
L2 cache: 2048K
NUMA node0 CPU(s): 0
方式二:last
[root@luffy-01 ~]# last 谁在什么时间登陆了系统,连接了多久
root pts/0 10.0.0.1 Tue Jan 15 08:47 still logged in
pizza tty1 Tue Jan 15 08:44 still logged in
方式三:lastlog
显示系统中所有用户的最近一次的登录信息
15、如何正确关机和重启
重启:
init 6 将启动级别改为重启
reboot 立刻重启
shutdown -r 1 一分钟后重启系统
shutdown -c 把正在关机或者重启的命令取消掉,一台远程登录重启,另一台可以在时间内停止这条命令
shutdown -r now =====>相当于reboot
关机:
init 0
poweroff 会断电(物理机)
halt 需要手动关闭电源(物理机)
shutdown -h 1
shutdown -h now ======>相当于poweroff
16、写出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 搜索历史命令,没有找到,继续按快捷键,继续搜索,找到了按enter
17、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
练习题总结
正则表达式练习题
取出网卡ip地址
取出权限
grep,sed,awk进行过滤
find命令与其他命令配置rm ls -l sed
三种方法
date显示或设置系统日期
按照你的说明显示指定的日期
以指定格式显示日期
自动修改系统时间
Linux下面快捷键
vi/vim快捷键
Linux之特殊符号与正则表达式的更多相关文章
- 【转】linux的特殊符号与正则表达式
[转]linux的特殊符号与正则表达式 第1章 linux的特殊符号 1.1 通配符 * {} 1.1.1 含义 方便查找文件 通配符是用来找文件名字的. 1.1.2 * 通过find 命令找以 . ...
- linux的特殊符号与正则表达式
第1章 linux的特殊符号 1.1 通配符 * {} 1.1.1 含义 方便查找文件 通配符是用来找文件名字的. 1.1.2 * 通过find 命令找以 .sh 结尾的文件,使用*替代文件名字. ...
- linux 中特殊符号用法详解
# 井号 (comments)#管理员 $普通用户 脚本中 #!/bin/bash #!/bin/sh井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行 ...
- (转)linux 中特殊符号用法详解
linux 中特殊符号用法详解 原文:https://www.cnblogs.com/lidabo/p/4323979.html # 井号 (comments)#管理员 $普通用户 脚本中 #!/b ...
- linux的文件处理(匹配 正则表达式 egrep awk sed)和系统、核心数据备份
文件处理 1.处理方式 匹配 正则表达式 egrep awk sed 2.文件中的处理字符 \n 新行符 换行 \t 制表符 tab键 缺省8个空格 \b 退格符 backspace键 退格键 ...
- LINUX中,find结合grep正则表达式,快速查找代码文件。
###目的###LINUX中,find结合grep正则表达式快速查找代码. 例如经常有需求:查找当前目录下所有.h文件中,"public开头,中间任意字符,以VideoFrameReceiv ...
- [转帖]Linux教程(13)- Linux中的通配符和正则表达式
Linux教程(13)- Linux中的通配符和正则表达式 2018-08-22 06:16:44 钱婷婷 阅读数 39更多 分类专栏: Linux教程与操作 Linux教程与使用 版权声明:本文 ...
- 文件类型分类:头文件dirent.h中定义的文件类型与linux内文件符号对应关系
头文件 dirent.h 定义了文件类型: enum{ DT_UNKNOWN = 0, //未知类型 DT_FIFO = 1, //first in, ...
- linux符号与正则表达式
特殊符号 > 或者1> 标准输出重定向 先把文件的内容清空 再放入新的内容 >> 或 2>> 追加重定向 把内容放入文件的最后一行 1 ...
随机推荐
- asp.net-常用服务器控件-20180329
常用服务器控件 1.文本类型控件 Label控件 TextBox控件 2.按钮类型控件 Button控件 ImageButton控件 3.选择类型控件 CheckBox控件 RadioButton控件 ...
- node实现简单的群体聊天工具
一.使用的node模块 1.express当做服务器 2.socket.io 前后通信的桥梁 3.opn默认打开浏览器的模块(本质上用不到) 难点:前后通信 源码地址:https://github.c ...
- mapper代理查询
对于查询来说,要根据具体的业务,来指定mapper接口中方法的返回值类型1:如果只返回一条记录,mapper接口中方法的返回值类型应指定为pojo类型或其他简单类型,这样mybatis内部就会使用se ...
- JS使用cookie实现只出现一次的广告代码效果
我们上网经常会遇到第一次需要登录而之后不用再登录的网站的情况,其实是运用了Cookie 存储 web 页面的用户信息,Cookie 以名/值对形式存储,当浏览器从服务器上请求 web 页面时, 属于该 ...
- 中文汉字和常见英文数字等的unicode编码范围
- HTML5为输入框添加语音输入功能
这里介绍的是大家以后要用到的html强大功能,可直接给输入框增加语音功能,下面我们先来看看实现方法. 大家可以看到在输入框右边的麦克风图标,点击麦克风就能够进行语音识别了. 其实很简单,语音识别是ht ...
- Java Filter防止sql注入攻击
原理,过滤所有请求中含有非法的字符,例如:, & < select delete 等关键字,黑客可以利用这些字符进行注入攻击,原理是后台实现使用拼接字符串,案例:某个网站的登入验证的SQ ...
- AI从业者需要应用的10种深度学习方法
https://zhuanlan.zhihu.com/p/43636528 https://zhuanlan.zhihu.com/p/43734896 摘要:想要了解人工智能,不知道这十种深度学习方法 ...
- 19.Odoo产品分析 (二) – 商业板块(11) – 在线活动(1)
查看Odoo产品分析系列--目录 点击安装"在线活动". 1. 主页 在线活动绑定在电子商务中,在网站中可以看到在线活动的菜单: 在这里可以按时间看到每一个活动. 2. 新建活动 ...
- iOS ---------- 获取设备的各种信息
一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...