bash的特性:
变量
快捷键
命令别名
命令行展开:{},~
管道
输入、输出重定向
编程
命令行补全
路径补全
1、文本处理命令
字符统计wc:word count,wc [options] FILE
-l:只显示行数
-w:只显示单词
-c:只显示字符数
转换tr:translate,tr '原来的字符集合' '转换为的字符集合',输入重定向或者管道输出的命令
-d '字符集合':把出现的文件组的,属于字符集合中的字符统统删除
eg: echo "hello world" | tr -d 'abcde' ---->hllp worl
(取列的操作)文本切割cut:能够指定的符号作为行中内容的分隔符 ,将每一行切片,而只取出某些片
cut [options] FILE
-d指定分隔符,默认分隔符为空白
-f1,5指定那个字段
与cut命令相反的join:
排序sort:默认是以ASCII字符排序的
-f:排序时忽略字符大小写
-n:以数值大小进行排序
-r:降序
-u:移除重复的行,只保留一个
-R:随机排序
-t:指定分割符
-k:指定那个字段
与uniq一起使用sort
-c:统计每行重复的次数
-u:只显示没有重复的行
-d:只显示重复的行
grep(取行的操作):选择,grep 文本过滤工具 Globel Search Regular Exmpression and Printing
grep [options] 'pattern' FILE
命令 选项 模式 文件
不加引号:直接过滤字符串
加引号:在进行模式匹配的时候必须加引号,单引和双引号都可以
必须加双引号:引用变量的时候
[options];
--color=auto
-r:递归的搜索
-c:统计有多少行匹配模式
-e:可以指定多个匹配模式 用法: -e "pattern1" -e"pattern2" 结果输出的是条件或者的关系
-v:反向选取,只显示不符合模式的行
-n:把匹配的行的行号标出来
-o:只显示被模式匹配到的字符串,而不是整个行
-i:匹配时不区分大小写
-A #:显示匹配到的行时,顺便显示后面的#行
-B #:前面的#行
-C #:前后的#行
-E:使用扩展的正则表达式
grep -E 相当于 egrep
grep egrep fgrep
默认支持基本正则表达式 支持扩展正则表达式 不支持正则表达式元字符,搜索快
正则表达式是一类字符所书写的模式(pattern)
元字符:不表示字符本身的意义,而用于额外功能性的描述
正则表达式:基本正则表达式,扩展正则表达式
支持基本正则表达式的元字符:贪婪模式(尽可能长地去匹配符合模式的内容)
^:锚点行首的符合条件的内容,用法格式"^pattern"
$:锚点行首的符合条件的内容,用法格式"pattern$"
^$:空白行
.:匹配任意单个字符
*:匹配紧挨在前面的字符任意次(0,1,多次)
a*b---> ab,aab,acb(不能),b
.*:匹配任意长度的任意字符
eg:
[root@localhost ~]# grep ".n*n" /etc/rc.d/rc.sysinit |wc -l //匹配n前面有单个字符,然后n出现了任意次,随后还有一个n
511
[root@localhost ~]# grep ".n.*n" /etc/rc.d/rc.sysinit | wc -l //匹配n前面有单个字符,然后n与n之间有任意长度的任意字符
314
\?:匹配紧挨在前面的字符0次或1次
a\?b---
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{m,\}:匹配其前面的字符至少m次
\{m\}:精确匹配前面的m次
\{0,n\}:0到n次
\<:锚点词首----相当于 \b,用法格式:\<pattern
\>:锚点词尾,用法格式:\>pattern
\<pattern\>:单词锚点
\(\):分组,用法格式:\(pattern\)
\(a.b\).*\1
eg: [root@localhost ~]# cat 2.txt
He like his liker
He love his liker
She love her lover
She like her lover
[root@localhost ~]# grep "\(l..e\).*\1r" 2.txt
He like his liker
She love her lover
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] : 所有数字, 相当于0-9
[0-9]---> [[:digit:]]
[:lower:]:所有的小写字母
[:upper:]:所有的大写字母
[:alpha:]: 所有的字母
[:alnum:]: 相当于0-9a-zA-Z
[:space:]: 空白字符
[:punct:]:所有标点符号
export GREP_COLOR='01:32'
扩展正则表达式:
.:
[]:
[^]:
*:
?:
{m,n}:至少m次,至多n次
():
+:
a|b: c|Cat---> c,Cat
\<:
\>:
man 7 regex
man bash---PS1
bash的配置文件:
profile类:交互式登录用户:顺序 /etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc
/etc/profile:全局,对所有用户有效
/etc/profile.d/*.sh:全局,对所有用户有效
~/.bash_profile:仅对某用户自己有效
功能:设定环境变量和运行命令或脚本
bashrc类:非交互式登录用户 顺序~/.bashrc-->/etc/bashrc--->/etc/profile.d/*.sh
/etc/bashrc:全局有效
~/.bashrc:仅对某用户自己有效
功能:设定本地变量和定义命令别名
export PATH=$PATH:/root
2、命令别名:
alias 别名='正常命令'
unalias 别名
当别名跟命令的名字相同时,如果使用原有的命令而非别名,则使用" \命令"
别名的作用范围是当前shell进程,想要shell永久生效,需要定义在配置文件中
echo 'alias grep="grep --color"' >> /etc/bashrc----> source /etc/bashrc
3、管道: shell COMMAND1 | COMMAND2
echo pass123 | passwd --stdin user1
4、将默认数据流改为其它设备,就称作为IO重定向
stdin:Standard Input 标准输入,默认输入fd:0 设备是键盘
stdout:Standard Output 标准输出,默认输出fd:1 设备是监视器
错误输出fd:2 设备是监视器
输入重定向
<: COMMAND < /from/somewhere
<<:Here Document,此处创建文档
cat > filename << EOF
xx
xx
EOF (通常用于脚本中生成文档)
cat << EOF
xxx
xxx
EOF(通常用于脚本中想用户输出大段信息)
输出重定向
>覆盖重定向 set -C:避免覆盖(强制覆盖>|)已经存在的文件中的内容,set +C关闭避免覆盖的功能
>>追加重定向
/dev/null:数据黑洞
错误输出重定向
2>覆盖重定向
2>>追加重定向
同时重定标准输出和错误输出
COMMAND > /path/to/stdout 2> /path/to/error
标准输出和错误输出定向至一个文件
COMMAND &> /path/to/somewhere
COMMAND > /path/to/somewhere 2>&1
5、tee命令即到屏幕上面显示,又保存到文件中
COMMAND1 | tee /path/to/somefile [| less]
5、语言控制结构
顺序执行
选择执行
循环执行
练习:
1、显示/proc/meminfo文件中以不区分大小的s开头的行;
#grep "^[sS]" /proc/meminfo
2、显示/etc/passwd中以nologin结尾的行;
#grep "nologin$" /etc/passwd
3、取出默认shell为/sbin/nologin的用户列表
# grep "/sbin/nologin" /etc/passwd | cut -d: -f1
4、取出默认shell为bash,且其用户ID号最小的用户的用户名
#grep "bash$" /etc/passwd | sort -t: -k3 | head -1 | cut -d: -f1
#grep "bash" /etc/passwd | awk -F: -v OFS=":" '{ print $3,$1}' |sort -n | head -1 | cut -d: -f2
5、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
#grep "^#[[:space:]]\{1,\}[^[:space:]].*" /etc/inittab
6、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
#grep ":[[:digit:]]:" /etc/inittab
7、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
#grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
8、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
#grep "^\([[:digit:]]\).*\1$" /etc/inittab
#grep "^\([0-9]\).*\1$" /etc/inittab
9、显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
#grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/rc.d/rc.sysinit
10、显示/etc/rc.d/rc.sysinit中符合形为"任意单个字符n任意字符任意单个字符n"模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,
而后是任意单个字符后面跟了个n;
#grep ".n.*n" /etc/rc.d/rc.sysinit
11、显示/etc/rc.d/rc.sysinit中符合形为"任意单个字符n任意字符任意单个字符n"模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,
而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同;
#grep "\(.n\).*\1" /etc/rc.d/rc.sysinit
12、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
#grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
13、找出某文件中的,1位数,或2位数;
#grep "\<[[:digit:]]\{1,2\}\>"
14、找出ifconfig命令结果中的1-255之间的整数;
#ifconfig | grep "\<[1-9]\{1,3\}\>"
grep -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
15、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
#grep "^student\>" /etc/passwd
16、统计/usr/bin/目录下的文件个数;
# ls /usr/bin | wc -l
17、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;
# cut -d: -f7 /etc/passwd | sort -u | grep -v "^$"
18、思考:如何显示/var/log目录下每个文件的内容类型?
# file /var/log/*
# cd /var/log ; file `ls /var/log`
19、取出/etc/inittab文件的第5行;
# head -5 /etc/inittab | tail -1
20、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;
# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
21、显示/etc目录下所有以pa开头的文件,并统计其个数;
# ls /etc/pa* | wc -l
22、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文尾部;
# echo 'alias cls=clear' >> ~/.bashrc
22、显示/proc/cpuinfo中的processor开头且后面跟了至少1个空白字符的行;而后统计相关的行数;
#grep --color "^processor[[:space:]]\{1,\}" /proc/cpuinfo | wc -l
23、显示/var/log/secure文件中包含"Failed password"或"FAILED LOGIN"的行;而后统计相关的行数;
#grep -E "(Failed password)|(FAILED LOGIN)" /var/log/secure | wc -l
24、显示/var/log/secure文件中记录的属于当前系统时间的前一天的信息中包含"Failed password"或
"FAILED LOGIN"的行;而后统计相关的行数;
# Date=`date +"%b %e" -d'-1 day'`;grep "$Date" /var/log/secure | grep -E "(Failed password | FAILED LOGIN)" | wc -l
25、找出netstat -tan命令执行的结果中以TIME_WAIT或ESTABLISHED结尾的行;
#netstat -ant | grep -E "(TIME_WAIT | ESTABLISHED)" --color
匹配真正的IP地址
1.0.0.1----223.255.255.254
#ifconfig | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | grep -v "^255"
1-9. 1-9. 1-9. 1-9.
10-99. 10-99. 10-99. 10-99.
100-199. 100-199. 100-199. 100-199.
200-219. 200-249. 200-249. 200-249.
220-223. 250-255. 250-255. 250-255.
#ifconfig | egrep -o --color "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
配置文件:
文本文件
XML文件:XML是可扩展标记语言 (Extensible Markup Language, XML)缩写
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
SOAP(Simple Object Access Protocol)简单对象访问协议,是交换数据的一种协议规范,使用在计算机网络
Web服务中.SOAP 指简易对象访问协议、SOAP 是一种通信协议、SOAP 用于应用程序之间的通信、SOAP 基于 XML
SOAP 是一种用于发送消息的格式、SOAP 被设计用来通过因特网进行通信、SOAP 独立于平台、SOAP 独立于语言、
博客 grep egrep 文件检索工具 grep 文本处理工具之一grep命令详解
grep 正则表达式 元字符
标签:字符,grep,文本处理,etc,rc,匹配,工具,任意 From: https://www.cnblogs.com/smoke520/p/18351734