系统常见特殊符号、通配符、正则表达式
一、系统常见特殊符号
1、基础符号系列
1)$
①普通用户命令行提示符
[sangha@hasang02-01 ~]$
②在awk中,$1表示第一列
awk '{print $1}' test.txt
③取出变量的内容
echo $LANG
2)!
①取反或排除
awk '!/xiang/' test.txt
find -type f ! -name "*.txt"|xargs ls -l
②命令行中表示取出最近命令
!awk(不建议用)== history|grep awk
3)|
管道
4)#
①root用户命令提示符
[root@hasang02-01 ~]#
②注释
2、引号符号系列
1)单引号:' '
输入什么,就输出什么
2)双引号:" "
类似单引号,单部分内容会被解析
3)反引号:` `
执行引号里面的命令,用于其他命令调用,同$()
3、定向符号系列
1)小于符号:<
①一个小于号:标准输入重定向
xargs -n2 < test.txt --- 把文件里的内容按两个一行显示
②两个小于号:标准输入重定向
用于一次性向文件中写入多行内容
2)大于符号:>
①一个大于号:标准输出重定向(会清空原文件内容)
echo "abc" >test.txt
②两个大于号:标准输出追加重定向(追加到文件最后一行)
echo "abc" >>test.txt
3)错误重定向:2>
①错误输出重定向:ifconfi 2>test.txt
②错误输出追加重定向:ifconfi 2>>test.txt
③把错误的正确的都追加输入到指定文件:ifconfig &>>test.txt 或 ifconfg >>test.txt 2>&1
4、路径信息系列
1)点:.
①表示当前目录:cd .
②加载(==source):. /etc/profile
2)点点:..
表示上一层目录:cd ..
3)波浪线:~
表示当前用户家目录:cd ~
5、逻辑符号系列
1)两个and符号:&&
前面的命令执行成功,再执行后面的命令
2)两根竖线:||
前面的命令执行不成功,才执行后面的命令
3)分号: ;
分别执行两个命令
二、通配符
通配符多用于处理文件名称信息,find ls -l 常用
1、星号:*
表示匹配所有内容
示例1:找出以.txt结尾的文件
find /test -type f -name "*.txt"
示例2:找出包含字符串test的文件
find /test -type f -name "*test*"
示例3:找出以test开头.txt结尾的文件
find /test -type f -name "test*.txt"
2、大括号:{}
表示构造出一个序列
①单个连续序列
echo {1..10} ; echo {a..z}
②单个不连续序列
echo {1..10..2} == echo {1,3,5,7,9,}
③多个连续序列
echo {1..3}{1..3}
④多个不连续序列
echo {1,3,4}{2,3}
⑤单个字符串和序列组合
echo A{A,B} ; echo A{,B}
示例1:一次性创造多个文件
touch stu{1..10}.txt
示例2:文件备份
copy test.txt{,.bak}
三、基础正则表达式(basic regular expression BRE)
正则表达式多用于处理文件内容信息,三剑客命令和各种计算机语言常用
1.尖号:^
表示以什么开头的信息:grep '^m' test.txt
2.美元符号:$
找出以什么结尾的信息:grep 'm$' test.txt
3.尖号加美元符号:^$
匹配空行信息:grep -v '^$' test.txt
4.一个点:.
匹配任意一个且只有一个字符信息(不能匹配空行):grep -o '.$' test.txt
5.星号:*
匹配0个或多个连续出现的字符信息,会匹配出找不到的内容,预支匹配,默认将所有内容显示出来:grep '0*' test.txt
6.点星:.*
匹配文件中所有的内容(可以匹配空行信息):grep '.*' test.txt
①找出文件以m开头,一行中的所有信息:grep '^m.*' test.txt
②找出文件以m开头,以m结尾的信息:grep '^m.*m$' test.txt
7.转译符号:\
可以将有意义的符号,转译成没有意义的符号,也可以将没有意义的符号,转译成有意义的符号。
①找出以.结尾的行的信息:grep '\.$' test.txt
②将文件一行信息,转换成一列显示:tr " " "\n" <test.txt
8.中括号:[abc]
表示分别匹配中括号里的内容,即匹配a或b或c:grep '[abc]' test.txt
示例1:找出不包含数字或大写字母的行:grep -v '[0-9A-Z]' test.txt
9.中括号加尖号:[^abc]
排除/不匹配指定字符信息:grep '[^abc]' test.txt
示例1:找出不以a或b或c开头的行
grep '^[^abc]' test.txt
示例2:找出不以空格结尾的行
grep '[^ ]$' test.txt
四、扩展正则表达式(extended regular expression ERE)
1.加号:+
+前面字符出现一次或一次以上,只显示包含对应字符串的行(对比*)
egrep '[0-9]+' test.txt
2.竖线:|
匹配多个满足条件的信息:egrep 'a|b|c' test.txt
3.小括号:()
匹配一个整体信息:grep 'a(b|c)d' test.txt
后项引用前面括号里的内容(多与sed连用):echo 123456|sed 's#(..)(..)(..)#<\2><\3><1>#g'
4.大括号:{}
指定匹配前面一个字符出现了多少次
1){n,m} :指定前面一个字符连续最少出现n次,最多出现m次
2){n}:指定前面一个字符连续出现了n次
3){n,}:指定前面一个字符连续出现了最少n次
4){,m}:指定前面一个字符连续出现了最多m次
5.问号:?
匹配前一个字符出现了1次或0次:egrep 'a?' test.txt
五、基础正则表达式和扩展正则表达式的区别
基础正则命令:grep sed awk
扩展正则命令:egrep sed -r awk
如果一定要用基础正则命令来使用扩展正则表达式的话,必须在扩展正则表达式前面加上转译符 \
如:grep 'a\|b' test.txt ; sed -n "/3306\|1521/p" /etc/services