1.系统特殊符号回顾
01.基础符号系列
001.美元符号 $
作用:
1.用于取出变量中的内容
2.用于取出指定列的信息(awk)
3.表示用户命令提示符
4.表示一行的结尾
在vim 中利用$符号可将光标跳转到当前行行尾
002.叹号符号 !
1.用于表示取反(逻辑非)或者排除的意思
2.命令行中表示取出最近命令
3.用于表示强制操作处理 vim 底行模式用于保存退出 :wq! :q!
003.竖线符号 |
1.表示 管道符号,前一个命令的执行结果交给后一个命令处理
2.经常配合xargs命令使用 xargs:将信息进行分组显示
004.井号符号 #
1.表示文件内容注释符号
2.表示用户命令提示符: 超级用户 # 普通用户 $
02.引号符号系列
001.单引号 ''
输出信息所见即所得
002.双引号 ""
和单引号功能类似.但对特殊信息会做解析(调取变量$ 反引号中的内容)
003.没有引号
和双引号功能类似,但是可以直接识别通配符信息
004.反引号 ``
先执行引号里面的命令,将结果交给引号外面的命令执行
005.美元括号 $()
等价于反引号
03.定向符号系列
1.小于符号
< 标准输入重定向
tr "测试""替换" < oldboy/oldboy.txt 利用tr替换命令时会用到输入重定向
<< 标准输入追加重定向
cat >> oldboy/oldboy1.txt << EOF 在文件中输入多行内容时会用到输入追加重定向
2.大于符号
>=1> 标准输出重定向
>>=1>> 标准输出追加重定向
2> 错误输出重定向
2>> 错误输出追加重定向
1.如何将正确信息和错误信息都输出到文件中(日志文件)
命令 oldboy > oldboy.ok.txt 2> oldboy.error.txt
利用一条命令将正确与错误的结果输出到不同的文件中,当命令执行正确的时候,正确结果将输出到ok也就是正确文件中,当命令执行不正确的时候,错误记过将输出到error也就是错误文件中,这就实现了命令执行正确与否结果都会输出
2.如何将正确信息和错误信息同时保留到文件中
方法一:命令 oldboy >> oldboy.info.log 2>> oldboy.info.log
方法二:命令 oldboy &>> oldboy.info.log
方法三:命令 oldboy >> oldboy.info.log 2>>&1
04.路径信息系列
001.单点符号 . ---- 表示当前目录
002.双点符号 .. ---- 表示上级目录
003.波浪符号 ~ ---- 表示用户家目录
004.横线符号 - ---- 两个目录之间切换
两个目录中间进行切换其实是借助于一个变量实现的
05.逻辑符号系列
001.与符号 &&
表示前面的命令执行成功,再执行后面的命令
当前面的命令执行错误的时候,则直接报错,后面的命令被忽略,只有前面的命令正确执行时,后面的命令才会执行
002.或符号 ||
表示前面的命令执行失败,在执行后面的命令
当前面的命令执行错误时,后面的命令才会执行,当前面的的命令执行成功时,后面的命令不会执行
003.非符号 !
2.系统通配符符号说明
01.通配符号作用说明--按照文件名称进行匹配查找
方便匹配找出多个数据文件(按照文件名称进行匹配查找)
02.通配符号企业应用
001.星号 *
表示匹配所有内容信息
find / -type f -name "*.txt" --- 表示以什么结尾的文件
find / -type f -name "old*" --- 表示以什么开始的文件
002.花括号 {}
1.生成序列信息
01.生成连续序列 echo {1..4} echo {a..d} echo {A..D} echo {01..10}
02.生成不连续序列 echo {1..10..2}奇数 echo {2..10..2}偶数
2.生成组合信息
echo A{,02}用来衍生出另一个常用功能
如何实现快速备份文件
cp oldboy/alex.txt{,.bak}
如何实现快速还原备份文件
mv oldboy/alex.txt{.bak,}
3.系统正则符号介绍
01.正则符号作用说明--按照文件内容进行匹配查找
方便匹配找出文件中的内容信息
02.正则表达符号分类
001.基础正则表达式(basic regular expression) ^ $ . * [] [^]
002.扩展正则表达式(extended regular expression) | + () {} ?
03.正则符号注意事项
001.按照每行信息进行过滤处理(以每行为单位进行筛选)
002.注意正则表达符号禁止中文
003.附上颜色信息进行正则过滤
04.基础正则符号说明
001.尖角符号 ^ 表示以什么开头的一行信息
002.美元符号 $ 表示以什么结尾的一行信息
003.空行符号 ^$ 找出空行信息
上述为以下内容的测试环境
004.点号符号 . 表示匹配任意一个切只有一个字符
文件中每一个字符都是任意字符,包括空格也是一个字符,系统会顺序匹配每一个字符,直到匹配完全部内容,空行不属于任何字符,所以不匹配,
上述grep -o grep命令添加参数-o 意为显示匹配过程
005.星号符号 * 匹配*前一个字符在每行连续出现0次或多次以上
grep命令查询文件中0在每行连续出现的次数,可以看出连续出现三次的行,和连续出现5次的行被准确匹配,之所以会显示其他行,是因为*的特性,会匹配0连续出现次数为0的行即为没有0连续出现的行,所以其他行及空行也会被显示出来.
006.点星符号 .* 匹配文件中所有信息(包括空行)
. 会匹配出任意内容,而*会匹配.连续出现那几行,没有出现的空行也会被显示出来. .* 一般用来匹配文件全部内容
此处会衍生出一个贪婪匹配问题:
#此时需要匹配以m开头以o结尾的内容 即 my blo和my go 内容
grep '^m.* o' ---- 以开头以o结尾,中间任意内容
上述我们利用^ 和 .* 结合,匹配出以m 开头 以o 结尾 ,中间任意内容的信息.理论上来说只会出现,我们需要的内容,但显然不是,此时我们若想解决此类问题,必须必须对指定匹配内容进行修改
#解决办法:指定具体信息阻止贪婪匹配
将需要匹配的内容进行具体描述用来加以区别,'^m.* blo' 意为以m开头 以 blo结尾的内容.
007.转义符号
作用:
1.将有特殊意义的符号,转义为普通信息进行识别
2.将没有意义的信息转义为有特殊意义的信息 (换行) (制表)=tab
echo 打印输出一行内容,利用 的转义含义再对内容进行输出,此时内容还是一行显示,此时需要利用echo 的-e参数允许输出的内容进行转义,然后得到多行内容
补充说明:系统中两种方法输入多行内容到文件中
1 cat >> oldboy.txt << EOF
>oldboy01
>oldboy02
>oldboy03
>EOF
2 echo -e "oldboy01 oldboy02 oldboy03">oldboy.txt
008.中括号符 [] 匹配括号中多个字符信息
对括号中多个字符进行匹配,在文件内容中从第一行往下进行匹配,首先发现中括号中o字符进行匹配.再往下又发现一个o在进行匹配,最后匹配到括号中e字符,所以对于括号中字符,grep 会一个一个全部匹配上
扩展问题:找出文件中以特定字符开头的内容
1.找出以 I 和 m 开头的行 ^[Im] 以I和m开头的行
2.找出selinux中除去注释行的全部内容 ^[a-Z] 以字母开头的内容
查看selinux配置文件可以发现除去以#开头的注释行之外.其他行都是字母开头的当然这个文件只有一个字母S,由此我们可以利用一种正则符号^[a-Z] 在利用 grep 筛选.将以任意字母开头的文件都筛选出来
009.排除符号 [^] 排除括号中多个字符信息
05.扩展正则符号说明
默认grep sed 不能直接识别
grep提升自己 --- egrep/grep -E
sed提升自己 --- sed -r
001.加号符号 + 表示+前一个字符杂每行连续出现1次或多次以上
对比 * 的匹配原则不难发现, + 匹配的 + 号前一个字符连续出现一次或多次以上行, 由上 0 连续出现一次的行唯有两行, 所以只列出此两行 , 对于grep 来说 要想使用 扩展正则符号需要加 -E 参数或者领用 egrep 命令
补充总结说明 : 一般 + 符号经常是与 [] 使用, 可以匹配出多个不同的连续字符
一般网站会出现身份证号及手机号的输入提示框,此时如果我们输入其他非数字的内容时,系统会报错,那如何对输入的内容进行判断筛选,就是利用[]+对输入的信息进行匹配查看
002.竖线符号 | 并且符号,用于匹配多个信息
003.小括号符号 ()
作用:
1.指定信息进行整体匹配
对()中的内容进行整体匹配, 此间注意一点 grep 利用扩展正则符号进行匹配时, 需要加引号 将正则符号引起来,不然系统无法正确判断正则符号作用
2.进行后项引用前项使用 :
1 .多用于sed 命令中的替换作用(一次性创建多个用户--详见系统中如何批量创建用户并设置8位随机密码)
echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd 1#g'|bash -- 创建用户
seq -w 10|sed -r 's#(.*)#useradd oldboy1;echo 123456|passwd --stdin oldboy1#g' -- 创建用户和密码
2 .将输出的信息转换后输出
echo 123456 ==> 转换为 <123456>进行显示
利用sed的替换功能实现()的后项引用前项功能 ( ) 1
echo 123456 ==> 转换为 <12><34><56>进行显示
echo 123456 ==> 转换为 <12>34<56>进行显示
004.花括号符号 {} 可以指定字符连续匹配的次数
1. x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
1. x{n} 表示前一个字符正好连续出现n次
1. x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
表示0连续次数n-∞ 若 n大于文件中0连续出现的次数,则grep不会匹配任何内容,因为不满足条件
1. x{,m} 表示前一个字符至少连续出现0次,最多出现m次
表示0连续出现次0-n 依旧遵循最大匹配原则
005.问号符号 ? 表示?前一个字符在每行连续出现0次或1次
06.正则符号使用问题
正则符号练习:利用ip address show eth0只把IP地址信息显示出来?
07.正则符号特性说明
让grep sed命令可以直接识别扩展正则
[root@oldboyedu ~]# grep "o+" oldboy_test03.txt
god
good
goood
gooood
4.课程知识重点总结
企业面试常见问题
正则符号与通配符号区别
通配符号
作用说明:查找文件名称信息
使用场景:命令行经常使用
正则符号
作用说明:查找文件内容信息
使用场景:三剑客命令经常使用/各种语言经常使用
学习方法总结说明
正则符号学习与帮助方法
利用手册信息
man grep/sed/awk
info grep/sed/awk(更加详细)
利用官方资料
http://www.gnu.org/software/grep/manual/