特殊符号
;
;命令的分隔符
[root@oldboyedu ~]# pwd;whami;which pwo
/root
-bash: whami:未找到命令
which: no pwo in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin)
&&
&& 前面命令必须执行成功,才会往后执行
[root@oldboyedu ~]# ll wang.txt && echo wang
ls: 无法访问 'wang.txt': 没有那个文件或目录
[root@oldboyedu ~]# ll uniq.txt && echo wang
-rw-r--r-- 1 root root 65 10月 26 08:08 uniq.txt
wangeg:[root@oldboyedu ~]# cd /etc/ && tar zcvf test.tar.gz hosts
hosts
[root@oldboyedu etc]#
||
|| 前面命令必须执行失败,才会执行后面的命令
[root@oldboyedu ~]# ll wang.txt || echo wang
ls: 无法访问 'wang.txt': 没有那个文件或目录
wang
[root@oldboyedu ~]# ech wang || ll uniq.txt
-bash: ech:未找到命令
-rw-r--r-- 1 root root 65 10月 26 08:08 uniq.txt
[root@oldboyedu ~]# ll uniq.txt || echo wang
-rw-r--r-- 1 root root 65 10月 26 08:08 uniq.txteg:[root@oldboyedu ~]# cd oldboy || mkdir oldboy
-bash: cd: oldboy: 没有那个文件或目录
[root@oldboyedu ~]# ll
总用量 0
drwxr-xr-x 2 root root 6 11月 12 12:50 oldboy
[root@oldboyedu ~]# cd oldboy || mkdir oldboy
[root@oldboyedu oldboy]#
> 或1>
> 或者1> 标准正确输出重定向,只接受正确的结果
#并不是只有echo才可以往文件中追加内容,cat ls都可以,>重定向符号,表示把输出到屏幕上的东西输出到文件中,>表示先清空,在写入,哪怕指令是错误的,也是先清空文件原有内容
[root@oldboyedu oldboy]# echo aa > a.txt
[root@oldboyedu oldboy]# cat a.txt
aa
[root@oldboyedu oldboy]# echo b > a.txt
[root@oldboyedu oldboy]# cat a.txt
b
[root@oldboyedu oldboy]# ech c >a.txt
-bash: ech:未找到命令
[root@oldboyedu oldboy]# cat a.txt清空文件
[root@oldboyedu oldboy]# cat a.txt
11
[root@oldboyedu oldboy]# > a.txt
[root@oldboyedu oldboy]# cat a.txt
[root@oldboyedu oldboy]#
>> 或 1>>
>> 或者 1>> 标准正确追加输出重定向,只接受正确的结果
#并不是只有echo才可以往文件中追加内容,cat ls都可以,>>追加重定向符号,表示把输出到屏幕上的东西追加到文件中,>>表示对文件原内容无影响
[root@oldboyedu oldboy]# cat a.txt
111
[root@oldboyedu oldboy]# ls b.txt >> a.txt
ls: 无法访问 'b.txt': 没有那个文件或目录
[root@oldboyedu oldboy]# cat a.txt
111
[root@oldboyedu oldboy]# ls a.txt >> a.txt
[root@oldboyedu oldboy]# cat a.txt
111
a.txt
2>
2> 标准错误输出重定向,只要错误的结果
[root@oldboyedu oldboy]# cat a.txt
111
a.txt
[root@oldboyedu oldboy]# echo aa 2> a.txt
aa
[root@oldboyedu oldboy]# cat a.txt
[root@oldboyedu oldboy]# ech aa 2> a.txt
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
2>>
2>> 标准错误追加输出重定向,只要错误的结果
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
[root@oldboyedu oldboy]# echo bb 2>> a.txt
bb
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
[root@oldboyedu oldboy]# cho 11 2>> a.txt
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
-bash: cho:未找到命令
###同时接收正确与错误的结果 因为重定向是先清空再写入,因此一般用的是追加重定向,两个用法一致
1、>> 文件 2>> 文件 #可以同时输出同一个文件中,也可以是不同文件
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
-bash: cho:未找到命令
[root@oldboyedu oldboy]# cat b.txt
[root@oldboyedu oldboy]# echo 11 >> a.txt 2>> b.txt
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
-bash: cho:未找到命令
11
[root@oldboyedu oldboy]# cat b.txt
[root@oldboyedu oldboy]# ec 22 >> a.txt 2>> b.txt
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
-bash: cho:未找到命令
11
[root@oldboyedu oldboy]# cat b.txt
-bash: ec:未找到命令2、>> 文件 2>&1 #>&1 这表示跟屁虫,是固定搭配,表示跟着前面的走
[root@oldboyedu oldboy]# cat b.txt
-bash: ec:未找到命令
[root@oldboyedu oldboy]# echo 11 >> b.txt 2>&1
[root@oldboyedu oldboy]# cat b.txt
-bash: ec:未找到命令
11
[root@oldboyedu oldboy]# ca a.txt >> b.txt 2>&1
[root@oldboyedu oldboy]# cat b.txt
-bash: ec:未找到命令
11
-bash: ca:未找到命令
[root@oldboyedu oldboy]# echo 1 >> b.txt 2>>&1
-bash: 未预期的符号“&”附近有语法错误3、&>>文件 #是最简单的一种,不过结果如何都往同一个文件写
[root@oldboyedu oldboy]# cat b.txt &>> c.txt
[root@oldboyedu oldboy]# cat c.txt
-bash: ec:未找到命令
11
-bash: ca:未找到命令
[root@oldboyedu oldboy]# lsl a.txt &>> c.txt
[root@oldboyedu oldboy]# cat c.txt
-bash: ec:未找到命令
11
-bash: ca:未找到命令
-bash: lsl:未找到命令
cat向文件写内容
标准写法:cat >> 文件 << EOF #退出输入EOF
其他写法:cat >> 文件 << a #退出输a,要首尾呼应
[root@oldboyedu oldboy]# cat >> a.txt << EOF
> wang
> hu
> sun
> zhou
> zhao
> EOF
[root@oldboyedu oldboy]# cat a.txt
-bash: ech:未找到命令
bb
-bash: cho:未找到命令
11
wang
hu
sun
zhou
zhao
[root@oldboyedu oldboy]# cat >> b.txt << A
> 11
> 22
> A
[root@oldboyedu oldboy]# cat b.txt
-bash: ec:未找到命令
11
-bash: ca:未找到命令
11
22
[root@oldboyedu oldboy]# cat >> c.txt << a
> 123
> 456
> a
[root@oldboyedu oldboy]# cat c.txt
-bash: ec:未找到命令
11
-bash: ca:未找到命令
-bash: lsl:未找到命令
123
456
总结
# 注释或者命令提示符中的用户提示符 表示管理员 ~表示普通用户
$ 获取变量内容 echo $PATH awk取列 普通用户命令提示符
! 强制执行 wq! q!
| 命令的拼接,管道
; 命令的分隔符,不管前面的命令是否执行成功,都继续向后执行
&& 前面的命令必须执行成功,才会往后执行
|| 前面的命令必须执行失败,才会往后执行
> 标准输出正确重定向 1> 先清空后追加
2> 标准错误输出重定向
>> 标准正确输出追加重定向 1>>
2>> 标准错误输出追加重定向
`` 执行命令,优先级,优先执行``命令,把命令显示的东西留下,在执行其他命令
$() 执行命令,优先级,优先执行()命令,把命令显示的东西留下,在执行其他命令
"" 双引号和不加引号可以解析变量内容
'' 所见即所得,不能解析变量
~ 家目录
. 当前目录
.. 上一级目录
- 上一次所在目录 su 切换用户,不更新环境变量;su - 切换用户,更新环境变量
* 表示所有
{} 生成序列
[] 查找序列
? 表示任意单个字符
正则表达式
作用:用来过滤文件中的字符串
grep '' 文件 -o #表示显示过滤的过程
1、^ 过滤以什么开头的行
grep '^m' 文件 #过滤以m开头的行eg:[root@oldboyedu oldboy]# grep '^m' 1.txt
my blog is http: blog.51cto.com
my qq num is 5935281562、$ 过滤以什么结尾的行
grep 'm$' 文件 #过滤以m结尾的行eg:[root@oldboyedu oldboy]# grep 'm $' 1.txt
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com3、过滤空行
grep '^$' 文件 eg:[root@oldboyedu oldboy]# grep '^$' 1.txt 4、点.表示任意单个字符
grep '.' 文件 #过滤单个字符eg:[root@oldboyedu oldboy]# grep '.' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya5、星*前一个字符出现0次及0次以上
grep '8*' 文件 #过滤8出现0次及0次以上eg:[root@oldboyedu oldboy]# grep '8*' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya6、 .* 表示文件中的所有内容
贪婪匹配 .* 所有符号 任何符号 连续出现的字符 有多少匹配多少
grep '.*' 文件 #过滤文件中所有内容eg:[root@oldboyedu oldboy]# grep '.*' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya7、[] 表示任意单个字符串,还原带含义的特殊符号 .^$ 之类,支持序列
grep '[abc]' 文件 #不是过滤abc字符串,而是过滤或a或b或c的行
grep '[a-z]' 文件 #过滤a-z区间的所有字母
grep '[0-9]' 文件 #过滤0-9区间的所有数字
grep '[a-Z0-9.^$-]' 文件 #过滤a-z区间的所有字母或0-9区间所有数字或.或^或$或-,切记^不能写在开头,不然就成过滤以什么开头的行了,-不能写在中间,不然表示区间,只能从a-Z,不能从A-zeg:[root@oldboyedu oldboy]# grep '[abc]' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
aaaa,
lizhenyalizhenyalizhenya[root@oldboyedu oldboy]# grep '[a-z]' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156
aaaa,
not 572891888887.
lizhenyalizhenyalizhenya[root@oldboyedu oldboy]# grep '[0-9]' 1.txt
my blog is http: blog.51cto.com
my qq num is 593528156
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$[root@oldboyedu oldboy]# grep '[a-Z0-9.^$-]' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$8、还原符号\
\ 撬棍 转义字符 脱掉马甲打回原形
\n 回车换行
\t tab键
grep '[\.]' 文件 #过滤文件中的.eg:[root@oldboyedu oldboy]# grep '[\.]' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I teach linux.
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
not 572891888887.9、[^a] 表示对a进行取反
grep '[^a]' 文件 #对a取反eg:[root@oldboyedu oldboy]# grep '[^a]' 1.txt
[root@lzy oldboy]# cat oldboy.txt
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya
笔试题
1、统计每个字母出现的次数
[root@oldboyedu oldboy]# grep '.' 1.txt -o | sort | uniq -c| sort -rn |head31 18 l18 a16 t15 i14 o14 e12 n11 h11 ^2、统计每个单词出现的次数
[root@oldboyedu oldboy]# egrep '[a-Z]+' /etc/passwd -o| sort|uniq -c|sort -rn |head39 x37 sbin31 nologin13 var9 bin8 systemd5 User5 daemon5 bash4 root3、匹配身份证号
[root@oldboyedu oldboy]# grep '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9X]' 2.txt
孔 150000123874591242
夏 222113859123487192
赵 37142518322922103X[root@oldboyedu ~]# egrep '[0-9]{17}[0-9X]' 1.txt
孔 1500001238745912423r242
夏 222113859123487192
赵 37142518322922103X[root@oldboyedu ~]# egrep '[0-9]{17}[0-9X]$' 1.txt
夏 222113859123487192
赵 37142518322922103X[root@oldboyedu ~]# egrep '[0-9]{17}[0-9A-Z]$' 1.txt
夏 222113859123487192
赵 37142518322922103X###扩展 边界符 \b 或者 \<内容\>
[root@oldboyedu ~]# egrep '\b[0-9]{17}[0-9A-Z]\b' 1.txt
夏 222113859123487192
赵 37142518322922103X[root@oldboyedu ~]# egrep '\<[0-9]{17}[0-9A-Z]\>' 1.txt
夏 222113859123487192
赵 37142518322922103X
扩展正则
1、+ 表示前面的字符出现一次或一次以上
egrep '8+' 文件 #过滤8出现一次即一次以上的行eg:[root@oldboyedu oldboy]# egrep '8+' 1.txt
my qq num is 593528156
not 572891888887.2、{} 出现至少n次最多m次
egrep '[0-9]{18}' 文件 # 过滤连续的18个数字
egrep '8{2,3}' 文件 #至少2次,最多3次 优先匹配后面的数字eg:[root@oldboyedu oldboy]# egrep '[0-9]{18}' 2.txt
孔 150000123874591242
夏 222113859123487192eg:[root@oldboyedu oldboy]# egrep '8{2,3}' 1.txt
not 572891888887.
[root@oldboyedu oldboy]# egrep '8{2,3}' 1.txt -o
888
883、| 或者
egrep '^$|^#' 文件 #匹配文件的空行和以井号开头的,经常用来过滤文件生效的行数,需要-v取反
egrep 'qq|test' 文件 #查找出包含qq的行或包含test的行eg:[root@oldboyedu oldboy]# egrep -v '^$|^#' /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
SETLOCALDEFS=0eg:[root@oldboyedu oldboy]# egrep 'qq|test' 1.txt
test
my qq num is 5935281564、()当做一个整体
egrep 'lizhe(u|n)ya' 文件 #过滤出包含lizhenya的行货lizheuya的行eg:[root@oldboyedu oldboy]# egrep 'lizhe(u|n)ya' 1.txt
I am lizheuya teacher!
our site is http:www.lizhenya.com
lizhenyalizhenyalizhenya