系统符号
系统基础符号
美元符号:$
· 用于取出变量中的内容
· 表示用户命令提示符号
普通用户为 $ (超级用户为 #)
· 表示一行的结尾 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<<EOF
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!
EOF
基础正则符号:
^ --- 匹配以什么开头的信息
# 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
|