- 系统符号
- 系统基础符号
- 基础正则符号
- 扩展正则符号
美元符号:$
· 用于取出变量中的内容
· 表示用户命令提示符号
普通用户为 $ (超级用户为 #)
· 表示一行的结尾 vim中快捷键$,到一行的结尾
· 用于取出指定列的信息(awk)
例:echo {01..999}|xargs -n7|awk '{print $1}'输出1-999,按7列显示,选取第一列打印
叹号符号:!
· 用于表示取反或者排除意思
· 命令行中表示取出最近命令
但是建议使用 ctrl + r 调取历史命令/history |grep xxx
history -c清除历史记录 history -w保存历史命令到家目录的.bash_history里
· 用于表示强制操作处理
vim底行模式保存 退出 wq! q!
管道符号:|
表示管道符号,管道前面命令执行完结果,交给管道后面执行 经常配合xargs命令使用
例:
查找指定数据信息进行删除
find /oldboy -type f -name "oldboy*.txt"|xargs rm
find /oldboy -type f -name "oldboy*.txt" -exec rm -rf {} ;
find /oldboy -type f -name "oldboy*.txt" -delete
查找指定数据信息进行复制
find /oldboy -type f -name "oldboy*.txt" |xargs -i cp {} /oldgirl/
find /oldboy -type f -name "oldboy*.txt" |xargs cp -t /oldgirl/
find /oldboy -type f -name "oldboy*.txt" -exec cp -a {} /oldgirl ;
查找指定数据信息进行移动
find /oldboy -type f -name "oldboy*.txt" |xargs -i mv {} /oldgirl/
find /oldboy -type f -name "oldboy*.txt" |xargs mv -t /oldgirl/
find /oldboy -type f -name "oldboy*.txt" -exec mv {} /oldgirl ;
井号符号:#
表示文件内容注释符号 表示用户命令提示符号 超级用户为 #
引号符号系列
生成数值序列信息时不用加引号
双引号 ""
表示输入内容,就是输出内容,但是有时部分信息会被解析(内容为变量时)
单引号 ''
表示输入内容,就是输出内容 单引号里面是什么,输出的就是什么(所见即所得)
反引号 ``
表示命令执行结果留下,用于其他命令调用
美元括号:$()
表示命令执行结果留下,用于其他命令调用 类似 反引号
定向符号系列
小于符号:
单个小于符号 < 标准输入重定向符号
例:tr "a-z" "A-Z" < /etc/hosts
例:利用tr + /dev/urandom 产生随机数
tr -cd 'a-zA-Z0-9' < /dev/urandom | head -c 6
两个小于符号 << 标准输入追加重定向符号
例:
cat >> /boy.txt << EOF
boy01
boy02
boy03
EOF
大于符号:
单个大于符号 > 标准输出重定向符号
2> 错误输出重定向符号
两个大于符号 >> 标准输出追加重定向符号
2>> 错误输出追加重定向符号
路径信息系列
单点符号:. 表示当前目录 双点符号:.. 表示上级目录 波浪符号: ~ 表示用户家目录信息 超级用户:/root 普通用户:/home/用户名称 横线符号: - 两个目录路间进行切换 cd - == cd $OLDPWD 作用为切换到上一次访问的目录
逻辑符号系列
并且符号:&& 表示前面的命令执行成功,再执行后面的命令
或者符号:|| 表示前面的名称执行失败,再执行后面的命令
例:
mkdir /boy11 && echo ok || echo fail
ok
mkdir /boy11 && echo ok || echo fail
mkdir: cannot create directory ‘/boy11’: File exists
fail
系统通配符号
匹配的是文件名称信息 匹配任意字符信息 * 例: find /boy -name "boy*" rm -rf /boy/*txt
生成序列信息符号 {}
数字序列: {01..10}
奇数序列: {01..10..2}奇数序列中间差值是2,所以后面加..2
偶数序列: {00..10..2}
字母序列: {a..z}
组合序列: {12}{ab}会得到 1a 1b 2a 2b的结果
cp boy.txt{,.bak} --- 快速复制备份数据,结果是cp boy.txt boy.txt.bak
cp boy.txt{.bak,} --- 快速还原备份数据,结果是cp boy.txt.bak boy.txt
基础正则符号
通配符用于匹配文件名信息 基础命令结合使用find cp mv 等命令
正则符号用于匹配文件内容信息 高级命令结合使用grep awk sed命令
正则符号用途说明: 1. 可以利用符号表达特殊匹配作用 2. 可以分析日志文件中数据信息 3. 可以被三剑客命令所调用
测试文件准备: cat >>/oldboy/test.txt<基础正则符号:
^ --- 匹配以什么开头的信息 # grep ^m test.txt my blog is http://oldboy.blog.51cto.com my qq num is 49000448. my god ,i am not oldbey,but OLDBOY!$ --- 匹配以什么结尾的信息 # grep m$ test.txt my blog is http://oldboy.blog.51cto.com^$ --- 匹配空行信息 grep -v "^$" test.txt 排除空行显示内容. --- 匹配任意一个字符,且只匹配一个字符 # grep g.d test2.txt god* --- 匹配*前面一个字符连续出现0次或者多次 # grep o* test2.txt -o o oo ooo.* --- 匹配所有内容 # grep "^m.*m$" test.txt my blog is http://oldboy.blog.51cto.com--- 转义符号 1) 将有意义符号变得没有意义 # grep ".$" test.txt I teach linux. my qq num is 49000448. not 4900000448. 2) 将没意义字符变得具有意义 t -- 制表符 n -- 换行符 r -- 换行符[] --- 匹配多个字符信息, 多个字符是或者关系匹配 [^] --- 将匹配多个字符信息, 进行排除或者取反扩展正则符号扩展正则符号: (属于高级符号)
三剑客只有awk能识别,grep 与sed想要识别,需要做以下操作转换
grep -E 扩展正则
egrep 扩展正则
sed -r 扩展正则+ --- 匹配“+”号前一个字符连续出现1次或者多次 # grep -E "o+" test2.txt god good goood 例:grep -E [0-9]+ test.txt 匹配+号前连续出现的数字字符 grep -E [a-z]+ test.txt 匹配+号前连续出现的字母字符? --- 匹配 "?" 前一个字符连续出现0次或者1次 ?号是一个一个的进行匹配的,+号是一个或者多个的进行匹配 例: grep -E "o?" test2.txt gd god good goood grep -E "o+" test2.txt -o 通过grep的-o参数,可以看出匹配的过程中,+号是一个或者多个的进行匹配 o oo ooo grep -E "o?" test2.txt -o 通过grep的-o参数,可以看出匹配的过程中, ?号是一个一个的进行匹配的 o o o o o o{} --- 匹配" {}" 前一个字符连续出现指定次数 {n,m} --- 匹配"{}" 前一个字符连续最少n次,最多m次 例: grep -E "o{1,2}" test2.txt god good goood gooood goooood grep -E "o{1,2}" test2.txt -o 查看匹配过程 o oo oo o oo oo oo oo o{n} --- 匹配“{}“ 前一个字符连续出现n次 例: grep -E "o{2}" test2.txt -o oo oo oo oo oo oo grep -E "o{2}" test2.txt good goood gooood goooood{n,} --- 匹配”{}“前一个字符连续最少n次,最多没有限制 例: grep -E "o{2,}" test2.txt good goood gooood goooood grep -E "o{2,}" test2.txt -o oo ooo oooo ooooo{,m} --- 匹配”{}“前一个字符连续最少0次,最多m次 例: grep -E "o{,3}" test2.txt gd god good goood gooood goooood grep -E "o{,3}" test2.txt -o o oo ooo ooo o ooo oo| --- 匹配多个字符串信息 grep -E "oldboy|oldbey" test.txt I am oldboy teacher! my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY! grep -E "oldb[oe]y" test.txt I am oldboy teacher! my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY! # grep -Ev "^$|^#|#" /etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted() --- 将多个字符组合成一个整体进行匹配指定信息 grep -E "(oldboy)" test.txt 结果: I am oldboy teacher! my blog is http://oldboy.blog.51cto.com (两个效果一样) grep "oldboy" test.txt 结果: I am oldboy teacher! my blog is http://oldboy.blog.51cto.com --- 后向引用前项 echo 54321 | sed -r 's#([0-9]+)#<1>#g' ‘1’代表引用第一个()的内容 2就代表第二个()的内容 输出结果: <54321> echo 1234567890 | sed -r 's#([0-9]+)#<1>#g' <1234567890>如何取出IP地址:
思路 先找出有IP地址行 – 利用正则匹配出IP地址
IP地址的格式: 数字. 数字. 数字. 数字 (192.168.10.1)
ip a s eth0|grep "inet "| grep -E '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'
结果就会选中以下两个IP
inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute eth0可以将三个重复的"[0-9]{1,3}.“转换为”([0-9]{1,3}.){3}"
ip a s eth0|grep "inet "| grep -E '([0-9]{1,3}.){3}[0-9]{1,3}'
inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute eth0
ip a s eth0|grep "inet "| grep -E '([0-9]{1,3}.?){4}' -o |head -1
10.0.0.201



