系统特殊符号:
inode号码相同互为硬链接,一个文件只能有一个inode,但是可以有多个block,block大小调整要根据企业需求。
1) 基础符号系列
美元符号:$
叹号符号: ! 取反
下图表示先把以井号开头的过滤出来,再用-v取反。
竖线符号: | 管道符号 前一个命令执行结果交给后面命令处理
xargs 命令|xargs 命令
xargs: 将信息进行分组显示
xargs详解
补充: 如何忽略别名功能:
01. 使用命令的绝对路径
02. 在命令执行前加撬棍
03. 在xargs信息后面命令自动忽略别名
我们注意到,xargs后的rm并没有带上-rf,因为rm本身在entos7里就是rm -i的别名,-i的意思就是每次在删除的时候会自动询问你是否删除,如果rm在xargs后,会自动取消rm -i别名。
查找指定数据信息进行复制 查找出*.txt文件,批量复制到/tmp目录
01. 将找到的信息放到cp 和 最终目录中间
find /oldboy -type f -name "*.txt"|xargs -i cp {} /oldgirl
02. 利用cp指明谁是数据最终保存的目录信息
find /oldboy -type f -name "*.txt"|xargs cp -t /oldgirl
查找指定数据信息进行移动 查找出*.txt文件,批量移动到/tmp目录
01. 将找到的信息放到cp 和 最终目录中间
find /oldboy -type f -name "*.txt"|xargs -i mv {} /oldgirl
02. 利用cp指明谁是数据最终保存的目录信息
find /oldboy -type f -name "*.txt"|xargs mv -t /oldgirl
井号符号: #
2) 引号符号系列
'' 输出的信息,所见即所得
[root@oldboyedu oldboy]# echo 'oldboy $LANG $oldgirl'
oldboy $LANG $oldgirl
"" 和单引号功能类似 但对特殊信息会做解析
[root@oldboyedu oldboy]# echo "oldboy $LANG $oldgirl"
oldboy en_US.UTF-8 123
``($()) 将引号中的命令先执行,将执行结果交给引号外面的命令进行处理
没有引号 和双引号功能类似 但是可以直接识别通配符信息
3) 重定向符号:
>或者1> 标准输出重定向符号
2> 错误输出重定向符号
>> 标准输出追加重定向符号
2>> 错误输出追加重定向符号
如何将正确信息和错误信息都输出到文件中:(日志文件)
[root@oldboyedu oldboy]# cho oldboy >/oldboy/ok.txt 2>/oldboy/error.txt
[root@oldboyedu oldboy]# cat /oldboy/error.txt
-bash: cho: command not found
[root@oldboyedu oldboy]# echo oldboy >/oldboy/ok.txt 2>/oldboy/error.txt
[root@oldboyedu oldboy]# cat /oldboy/ok.txt
oldboy
方法一: 将正确和错误信息同时保留到一个文件
[root@oldboyedu oldboy]# echo oldboy >>/oldboy/info.log 2>>/oldboy/info.log
[root@oldboyedu oldboy]# cho oldboy >>/oldboy/info.log 2>>/oldboy/info.log
[root@oldboyedu oldboy]# cat /oldboy/info.log
oldboy
-bash: cho: command not found
方法二: 将正确和错误信息同时保留到一个文件
[root@oldboyedu oldboy]# echo oldboy &>/oldboy/info.log
[root@oldboyedu oldboy]# cat /oldboy/info.log
oldboy
[root@oldboyedu oldboy]# cho oldboy &>/oldboy/info.log
[root@oldboyedu oldboy]# cat /oldboy/info.log
-bash: cho: command not found
方法三: 将正确和错误信息同时保留到一个文件
[root@oldboyedu oldboy]# echo oldboy >/oldboy/info.log 2>&1
[root@oldboyedu oldboy]# cat /oldboy/info.log
oldboy
[root@oldboyedu oldboy]# cho oldboy >/oldboy/info.log 2>&1
[root@oldboyedu oldboy]# cat /oldboy/info.log
-bash: cho: command not found
< 标准输入重定向符号
tr < xargs <
<< 标准输入追加重定向符号
cat >>/oldboy.txt<<EOF
XXX
XXX
EOF
4) 路径信息系列
../ 上一级目录
./ 当前路径
~ 返回到家目录
- 两个目录之间进行快速切换
An argument of - is equivalent to $OLDPWD(环境变量)
补充说明:
[root@oldboyedu tmp]# cd $OLDPWD
[root@oldboyedu oldboy]# cd $OLDPWD
[root@oldboyedu tmp]# cd $OLDPWD
[root@oldboyedu oldboy]# echo $OLDPWD
/tmp
[root@oldboyedu oldboy]# cd /tmp/
[root@oldboyedu tmp]# echo $OLDPWD
/oldboy
5) 逻辑符号系列
&& 与逻辑符号 前一个命令执行成功, 再执行后面的命令
|| 或逻辑符号 前一个命令执行失败, 再执行后面的命令
&&符号实践操作:
[root@oldboyedu tmp]# # 需求: 想创建一个/alex目录, 在目录中创建一个oldboy.txt 一条命令搞定
[root@oldboyedu tmp]# mkdi /alex ; touch /alex/oldboy.txt
-bash: mkdi: command not found
touch: cannot touch ‘/alex/oldboy.txt’: No such file or directory
[root@oldboyedu tmp]#
[root@oldboyedu tmp]# mkdi /alex && touch /alex/oldboy.txt
-bash: mkdi: command not found
[root@oldboyedu tmp]# mkdir /alex && touch /alex/oldboy.txt
[root@oldboyedu tmp]# ll /alex/oldboy.txt
-rw-r--r--. 1 root root 0 Oct 10 03:00 /alex/oldboy.txt
[root@oldboyedu tmp]#
||符号实践操作
[root@oldboyedu tmp]# # 需求: /alex/oldboy.txt删除失败了,在/alex/error.txt文件中生成失败信息
[root@oldboyedu tmp]# rmx /alex/oldboy.txt || echo "failed" >>/alex/error.txt
-bash: rmx: command not found
[root@oldboyedu tmp]# cat /alex/error.txt
failed
[root@oldboyedu tmp]# rm /alex/oldboy.txt || echo "failed" >>/alex/error.txt
[root@oldboyedu tmp]# cat /alex/error.txt
failed
系统通配符号:
利用通配符号匹配文件名称信息
* 模糊匹配所有内容 oldboy old ol o*
find -name "*.txt"
ll /oldboy/*.txt
{} 生成序列信息 (生成一行序列)
生成连续序列
echo {1..10}
echo {01..100}
echo {a..z}
echo {A..Z}
生成不连续序列
echo {1..10..2} 奇数序列
echo {2..10..2} 奇数序列
echo {www,bbs,blog}
生成组合序列
[root@oldboyedu tmp]# echo {A,B}{01,02}
A01 A02 B01 B02
[root@oldboyedu tmp]# echo A{01,02}
A01 A02
[root@oldboyedu tmp]# echo A{,02}
A A02
快速备份文件数据方法
[root@oldboyedu tmp]# # cp /oldboy/oldboy.txt /oldboy/oldboy.txt.bak
[root@oldboyedu tmp]# echo oldboy.txt{,bak}
oldboy.txt oldboy.txtbak
[root@oldboyedu tmp]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu tmp]# echo /oldboy/oldboy.txt{,.bak}
/oldboy/oldboy.txt /oldboy/oldboy.txt.bak
[root@oldboyedu tmp]# cp /oldboy/oldboy.txt{,.bak} --最终命令
测试题:
01. 在/oldboy目录中创建alex.txt文件,并在/oldboy目录中生成alex.txt.ori备份文件
mkdir /oldboy
touch alex.txt
cp /oldboy/alex.txt{,.ori}
02. 如何将备份文件快速还原
rm /oldboy/alex.txt -f
mv /oldboy/alex.txt{.ori,}
快速还原
mv /oldboy/alex.txt.ori /oldboy/alex.txt
正则符号
1. 利用正则符号匹配文件内容信息
2. 正则符号经常出现在各种开发语言中, python java php
3. 正则符号经常被三剑客命令使用
基础正则符号: basic regular expression BRE
1. 尖角符号:^
以什么开头的信息 ll /oldboy|grep "^d"
2. 美元符号:$
以什么结尾的信息 ll -F /etc/|grep /$
创建测试环境:
cat >>/oldboy/oldboy.txt<<EOF
# oldboyedu-sz-01
oldboy-linux
oldboy-python-linux
# oldboyedu-sh
oldboy-linux
oldboy-python-linux
# oldboyedu-bj
oldboy-linux
java
mysql
go
python
EOF
[root@oldboyedu tmp]# cat /oldboy/oldboy.txt
# oldboyedu-sz-01
oldboy-linux
oldboy-python-linux
# oldboyedu-sh
oldboy-linux
oldboy-python-linux
# oldboyedu-bj
oldboy-linux
java
mysql
go
python
01. 将以oldboy开头的行找出来?
grep "^oldboy" 文件中过滤
grep "^oldboy" 文件中过滤
发屁
cat 文件|grep "^oldboy"
脱裤子 发屁
02. 将以linux结尾的行找出来?
grep "linux$" 文件中过滤
03. 将全部内容显示,但不要显示空行
^oldboy linux$
^$ -- 空行
grep -v "^$" 文件中过滤
3. 尖号美元:^$
空行符号
扩展正则符号: extended regular expression ERE
正则符号
基础正则符号: grep sed awk
^ 以什么开头的信息进行匹配:
[root@oldboyedu ~]# grep “^old” /oldboy/oldboy.txt
oldboy-linux
oldboy-python-linux
oldboy-linux oldboy01
oldboy-python-linux
oldboy-linux
[root@oldboyedu ~]# sed -n ‘/^old/p’ /oldboy/oldboy.txt
oldboy-linux
oldboy-python-linux
oldboy-linux oldboy01
oldboy-python-linux
oldboy-linux
[root@oldboyedu ~]# awk ‘/^old/’ /oldboy/oldboy.txt
oldboy-linux
oldboy-python-linux
oldboy-linux oldboy01
oldboy-python-linux
oldboy-linux
系统的正则符号部分:
测试环境:
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
基础正则符号:
1) 点符号 . ???
匹配任意一个字符,且只有一个字符
命令执行结果:
[root@oldboyedu ~]# grep "." ~/oldboy_test.txt
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!
显示匹配过程:
[root@oldboyedu ~]# grep "." ~/oldboy_test.txt -o
I
a
m
o
l
d
2) 星符号 * ???
匹配前一个字符连续出现了0次或者多次
[root@oldboyedu ~]# grep "0*" ~/oldboy_test.txt
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!
3) 点和星结合: .* 匹配任意所有信息 .* == *
[root@oldboyedu ~]# grep "^m.*m$" ~/oldboy_test.txt
my blog is http://oldboy.blog.51cto.com
问题: 贪婪匹配问题:
[root@oldboyedu ~]# grep "^m.*o" ~/oldboy_test.txt
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
指定具体信息阻止贪婪匹配
[root@oldboyedu ~]# grep "^m.*to" ~/oldboy_test.txt
my blog is http://oldboy.blog.51cto.com
4) 转义符号: \
将文件中的以 . 结尾的信息进行过滤??
\作用:
01. 将有特殊意义符号,转义成普通信息进行识别
02. 将没有意义的信息转义为有特殊意义的信息
\n 换行符号
\t 制表符号
换行符号作用:
[root@oldboyedu ~]# echo "oldboy01oldboy02"
oldboy01oldboy02
[root@oldboyedu ~]# echo "oldboy01\noldboy02\noldboy03"
oldboy01\noldboy02\noldboy03
[root@oldboyedu ~]# echo -e "oldboy01\noldboy02\noldboy03"
oldboy01
oldboy02
oldboy03
[root@oldboyedu ~]# echo -e "oldboy01\noldboy02\noldboy03" >oldboy.txt
[root@oldboyedu ~]# cat oldboy.txt
oldboy01
oldboy02
oldboy03
[root@oldboyedu ~]# grep ".$" oldboy_test.txt
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.
0101010101
11111
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "\.$" oldboy_test.txt
I teach linux.
my qq num is 49000448.
not 4900000448.
5) 括号符号:[ ]
匹配多个字符信息
[root@oldboyedu ~]# grep "oldb[oe]y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
问题: 将以I开头和m开头的行都找出来?
[root@oldboyedu ~]# grep "^[Im]" oldboy_test.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "^[a-Z]" /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
6) 括号和尖号组合 [^]
排除符号
[root@oldboyedu ~]# grep "[abc]" oldboy_test.txt
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 god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "[^abc]" oldboy_test.txt
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.
0101010101
11111
my god ,i am not oldbey,but OLDBOY!
扩展正则符号:
默认 grep sed不能直接识别
grep 提升自己 -- egrep/grep -E
sed 提升自己 -- sed -r
1) +号符号:
匹配前一个字符连续出现了1次或者多次
[root@oldboyedu ~]# grep "0*" oldboy_test.txt
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!
[root@oldboyedu ~]# grep "0+" oldboy_test.txt
[root@oldboyedu ~]# egrep "0+" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# egrep "0+" oldboy_test.txt -o
000
00000
张三 110105199004067631
李四 104105199004067631
赵六 oldboy
王五 104105199004067631
找出身份证信息输入错误的内容
[root@oldboyedu ~]# grep [0-9] oldboy_test02.txt
张三 110105199004067631
李四 104105199004067631
王五 104105199004067631
[root@oldboyedu ~]# grep -E "[0-9]+" oldboy_test02.txt
张三 110105199004067631
李四 104105199004067631
王五 104105199004067631
[root@oldboyedu ~]# grep -E "[0-9]+" oldboy_test02.txt -o
110105199004067631
104105199004067631
104105199004067631
[root@oldboyedu ~]# grep -Ev "[0-9]+" oldboy_test02.txt
赵六 oldboy
2) 竖线符号:|
并且符号,用于匹配多个信息
[root@oldboyedu ~]# grep -E "oldboy|oldbey" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep -E "oldb[oe]y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
3) 括号符号: ()
作用:
1. 指定信息进行整体匹配
[root@oldboyedu ~]# grep "oldb[oe]y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep "oldboey" oldboy_test.txt
my god ,i am not oldboey,but OLDBOY!
[root@oldboyedu ~]# grep "oldb(oe)y" oldboy_test.txt
[root@oldboyedu ~]# grep -E "oldb(oe)y" oldboy_test.txt
my god ,i am not oldboey,but OLDBOY!
[root@oldboyedu ~]# grep -E "oldb(o|e)y" oldboy_test.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
2. 进行后项引用前项使用: sed命令替换功能
批量创建用户 oldboy01..oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1
oldboy01
oldboy02
oldboy03
oldboy04
oldboy05
oldboy06
oldboy07
oldboy08
oldboy09
oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed 's#(.*)#useradd \1#g'
sed: -e expression #1, char 19: invalid reference \1 on `s' command's RHS
xargs: echo: terminated by signal 13
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g'
useradd oldboy01
useradd oldboy02
useradd oldboy03
useradd oldboy04
useradd oldboy05
useradd oldboy06
useradd oldboy07
useradd oldboy08
useradd oldboy09
useradd oldboy10
[root@oldboyedu ~]# echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g'|bash
useradd: user 'oldboy02' already exists
useradd: user 'oldboy03' already exists
useradd: user 'oldboy04' already exists
useradd: user 'oldboy05' already exists
useradd: user 'oldboy06' already exists
useradd: user 'oldboy07' already exists
useradd: user 'oldboy08' already exists
useradd: user 'oldboy09' already exists
useradd: user 'oldboy10' already exists
企业面试题: 批量创建用户 oldboy01..oldboy10,并给每个用户设置密码信息,默认初始化密码(123456)
01. 如何创建用户 给用户设置密码
02. 基础命令 echo {}/seq -w 10
03. sed命令替换信息方法
04. 正则符号 .* ()
05. 基础符号 ; |
06. bash内置命令
[root@oldboyedu ~]# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'
useradd oldboy01;echo 123456|passwd --stdin oldboy01
useradd oldboy02;echo 123456|passwd --stdin oldboy02
useradd oldboy03;echo 123456|passwd --stdin oldboy03
useradd oldboy04;echo 123456|passwd --stdin oldboy04
useradd oldboy05;echo 123456|passwd --stdin oldboy05
useradd oldboy06;echo 123456|passwd --stdin oldboy06
useradd oldboy07;echo 123456|passwd --stdin oldboy07
useradd oldboy08;echo 123456|passwd --stdin oldboy08
useradd oldboy09;echo 123456|passwd --stdin oldboy09
useradd oldboy10;echo 123456|passwd --stdin oldboy10
将输出的信息
echo 123456 ==> 转换为 <123456>进行显示
[root@oldboyedu ~]# # echo 123456 ==> 转换为 <123456>进行显示
[root@oldboyedu ~]# echo 123456
123456
[root@oldboyedu ~]# echo 123456|sed -r 's#([1-6]+)#\1#g'
123456
[root@oldboyedu ~]# echo 123456|sed -r 's#([1-6]+)#<\1>#g'
<123456>
[root@oldboyedu ~]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
echo 123456 ==> 转换为 <12><34><56>进行显示
[root@oldboyedu ~]# # echo 123456 ==> 转换为 <12><34><56>进行显示
[root@oldboyedu ~]# echo 123456
123456
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\2><\3>#g"
<12><34><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><><\3>#g"
<12><><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\3><\3>#g"
<12><56><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
<12><34><56>
echo 123456 ==> 转换为 <12>34<56>进行显示
4) 括号符号:{}
可以指定字符连续匹配的次数
第一种情况: x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
[root@oldboyedu ~]# grep -E "0{2,3}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep "0+" oldboy_test.txt
[root@oldboyedu ~]# grep -E "0+" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0+" oldboy_test.txt -o
000
00000
[root@oldboyedu ~]# grep -E "0{2,3}" oldboy_test.txt -o
000
000
00
[root@oldboyedu ~]# grep -E "0{2,4}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0{2,4}" oldboy_test.txt -o
000
0000
第二种情况: x{n} 表示前一个字符正好连续出现了n次
[root@oldboyedu ~]# grep -E "0{2}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0{2}" oldboy_test.txt -o
00
00
00
第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
[root@oldboyedu ~]# grep -E "0{2,}" oldboy_test.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~]# grep -E "0{2,}" oldboy_test.txt -o
000
00000
第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt
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!
my god ,i am not oldboey,but OLDBOY!
[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt -o
00
0
00
00
0
5) 问号符号 ?
定义匹配前一个字符出现0或者1次
创建一个测试环境:
cat >>oldboy_test03.txt<<EOF
gd
god
good
goood
gooood
EOF
[root@oldboyedu ~]# grep "o*" oldboy_test03.txt
gd
god
good
goood
gooood
[root@oldboyedu ~]# egrep "o+" oldboy_test03.txt
god
good
goood
gooood
[root@oldboyedu ~]# egrep "o?" oldboy_test03.txt
gd
god
good
goood
gooood
[root@oldboyedu ~]# egrep "o?" oldboy_test03.txt -o
o
o
o
o
o
o
o
o
o
o
[root@oldboyedu ~]# egrep "o+" oldboy_test03.txt -o
o
oo
ooo
oooo
补充: 想让grep sed命令可以直接识别扩展正则
[root@oldboyedu ~]# grep "o\+" oldboy_test03.txt
god
good
goood
gooood
[root@oldboyedu ~]# grep -E "0{,2}" oldboy_test.txt^C
[root@oldboyedu ~]# echo 123456|sed "s#\(..\)\(..\)\(..\)#<\1><\2><\3>#g"
<12><34><56>
总结:
* 匹配前一个字符出现0次或者多次
+ 匹配前一个字符出现1次或者多次
{} 匹配前一个字符指定出现多少次,至少0次
? 匹配前一个字符出现0次或者1次
利用ip address show eth0只把IP地址信息显示出来?
[root@oldboyedu ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:81:57:66 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::31af:a93d:2d09:e293/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@oldboyedu ~]# ip a s eth0|grep "[0-9].[0-9].[0-9].[0-9]"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
link/ether 00:0c:29:81:57:66 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o|head -1
10.0.0.200
[root@oldboyedu ~]# ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.)"
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.)" -o
10.
0.
0.
10.
0.
0.
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.){3}[0-9]+" -o
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
1500
1000
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}"
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]#
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o
1500
1000
10.0.0.200
10.0.0.255
[root@oldboyedu ~]# ip a s eth0|egrep "([0-9]+\.?){4}" -o|head -3|tail -1
10.0.0.200