自己总结的Linux Shell 脚本讲解+示例 精典版
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
\{n,m\}:匹配前面字符出现 n 次与 m 次之间,如 JO\{3,6\}B 匹配 JOOOB、JOOOOOOB 等字符串 [a-z] \{5\}: 匹配 5 个小写英文字母,比如 hello、house 等
awk 和 Perl 等 Linux 工具还支持正则表达式扩展出来的一些元字符,这些元字符如下表 所示
用方法为:awk [-F 域分隔符] ‘awk 程序段’ 输入文件。缺省的域分隔符是空格或
Tab(可以是这两者混合的)。
eg: awk -F”\t” ‘{print $2,$1}’ type.txt
type.txt 内容如下所示
1 a 1a
2 b 2b
结果:
a1
b2
注$1 表示第一个域,$0 表示所有域
?字符表示一位的任意字符 ^符号在通配中不代表行首,而是代表取反意义
5.grep 工具
grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印 出来,grep 也是 Linux 中最广泛使用的命令之一。 grep [选项] [模式] [文件…],模式可以是字符串,也可以是变量,还可以是正则表达 式,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式括起来 。模
类名
意义
[:upper:]
表示大写字母[A-Z]
[:lower:]
表示大写字母[a-z]
[:digit:]
表示阿拉伯数字[0-9]
[:alnum:]
表示大小写字母和阿拉伯数字[0-9a-zA-Z]
[:space:]
表示空格或 Tab 键
[:alpha:]
表示大小写字母[a-zA-Z]
[:cntrl:]
含 tcpdump 的行的后面
14.awk 工具及 awk 系统变量
awk 认为输入文件是结构化的,awk 将每个输入文件行定义为记录,行中的每个字符串
定义为域,域之间用空格、Tab 键或其他符号进行分割,分割域的符号就叫分隔符。awk
工具通过脚本的两种用法和 sed 命令一样,直接命令形式调用的方法有些不一样,其调
G
将保持缓冲区内容追加到模式缓冲区
eg: sed -n ‘$p’ type.txt 打印出 type.txt 文件的最后一行”$”是正则表达式,代表最后 一行。 sed -n ‘2,10!p’ type.txt 打印出除第二行到第十行外的所有行。 sed -n ‘/tcp/,$p’ type.txt 打印出除包含“tcp”的第一行到整个文件的最后一行。
Linux Shell 脚本讲解+示例 精华版
1.Vi 编辑器
向下查找:在 Normal 模式下,“/”+Keyword,如:/tcp 向上查找:在 Normal 模式下,“?”+Keyword,如:?tcp 替换:在 Normal 模式下,“:s”+“/”+Sourceword+“/”+“Destword”,如: :s/abc/bcd 全部替换:在 Normal 模式下,“:s”+“/”+Sourceword+“/”+“Destword”+“/g”, 如: :s/ad/bc/g 指定范围替换:在“:”与“s”间加入范围,如“:n1,n5s/abc/ddas/g”替换 1 至 5 行,“:1,$s/abc/ddas/g”替换全部
awk 定义了很多内建变量用于设置环境信息,我们称它们为系统变量,这些系统变量可
分为两种:○1 用于改变 awk 的缺省值,如域分隔符(FS);○2 用于定义系统值,在处理
\<\> \{n\} \{n,\}
意义 0 个或多个在*字符之前那个普通字符
匹配任意字符 匹配行首,或后面字符的非
匹配行尾 匹配字符集合 转义符,屏蔽一个元字符的特殊意义 精确匹配符号 匹配前面字符出现 n 次 匹配前面字符至少出现 n 次
\{n,m\}
匹配前面字符出现 n 次与 m 次之间
*符号用于匹配前面一个普通字符的 0 次或多次重复 hel*o:*符号前面的普通字符是 l,*字符就表示匹配 l 字符 0 次或多次,如字符串 helo、 hello、hellllllo 都可以由 hel*o 来表示 .符号用于匹配任意一个字符 „73.表示前面三个字符为任意字符,第 4 和第 5 个字符是 7 和 3,最后一个字符为任 意字符,如 xcb738、4J973U 都能匹配上述字符串 ^符号用于匹配行首,表示行首的字符是^字符后面的那个字符 ^cloud 表示匹配以 cloud 开头的行 $符号匹配行尾,$符号放在匹配字符之后 a、b、1、2 等字符属于普通字符,普通字符 可以按照字面意思理解,如:a 只能理解为英文的小写字母 a,没有其他隐藏含义。 micky$表示匹配以 micky 结尾的所有行 ^$ 表示空白行 []匹配字符集合,该符号支持穷举方法列出字符集合的所有元素 [0123456789]、[0-9]„„ [A-Za-z] [A-Za-z]* 匹配所有英文单词 \符号是转义符,用于屏蔽一个元字符的特殊意义
7.sed 工具
sed 是流编辑器,可对文本文件和标准输入进行编辑。sed 只是对缓冲区中原始文件的 副本进行编辑,并不编辑原始的文件,如果需要保存改动内容,可以选择使用下面两种
方法:重定向,w 编辑命令。 ○1 命令行中的使用方法: sed [选项] ‘sed 命令’ 输入文件 ○2 脚本文件,通过 sed 命令调用的方法:sed [选项] -f sed 脚本文件 输入文件, 该方法脚本文件的首行不以#!/bin/sed -f 开头 ○3 将 sed 命令插入脚本文件后,直接执行该脚本: ./sed 脚本文件 输入文件,该方法 脚本文件的首行是#!/bin/sed –f
10.sed 插入/追加文本
在匹配行前/后面追加文件,一般通过文件完成 eg: 脚本文件 insert.sh 内容如下: #!/bin/sed -f /file:/i\ We insert a new line 调用命令:./insert.sh type.txt 结果:在 type.txt 中包含“file:”的行的上面加入一行“We insert a new line”。把”/file:/i\” 改成“/file:/a\”则可以在目标行后追加文本“We insert a new line”
表示 Ctrl 键
[:graph:]或[:print:] [:xdigit:]
表示 ASCII 码 33-126 之间的字符 表示 16 进制数字[0-9A-Fa-f]
Linux 系统支持三种形式的 grep 命令,通常将这三种形式的 grep 命令称为 grep 命令族, 这三种形式具体为: grep:标准 grep 命令,支持基本正则表达式 egrep:扩展 grep 命令,支持基本和扩展正则表达式,等价于 grep –E fgrep:快速 grep 命令,不支持正则表达式,按照字符串的字面意思进行匹配,等价于 grep -F
-e
辑命令给 sed,-e 选项可以省略
-f
表示正在调用 sed 脚本文件
8.sed 命令
sed 经常和正则表达式结合使用
选项 p = a\
意义 打印匹配行 打印文件行号 在定位行号之后追加文本信息
i\
在定位行号之前插入文本信息
d
删除定位行
c\
用新文本替换定位文本
s
使用替换模式替换相应模式
r
从另一个文件中读文本
w
将文本写入到一个文件
y
变换字符
q
第一个模式匹配完成后退出
l
显示与八进制 ASCII 代码等价的控制字符
{}
ቤተ መጻሕፍቲ ባይዱ
在定位行执行的命令组
n
读取下一个输入行,用下一个命令处理新的行
h
将模式缓冲区文本拷贝到保持缓冲区
H
将模式缓冲区文本追加到保持缓冲区
x
互换模式缓冲区和保持缓冲区内容
g
将保持缓冲区内容拷贝到模式缓冲区
式代表要搜索的内容。如果没有[选项],命令的结果是包含目标内容的行的内容。
选项
意义
-c
只输出匹配行的数量
-i
搜索时忽略大小写
-h
查询多文件时不显示文件名
-l
只列出符合匹配的文件名,而不列出具体匹配行
-n
列出所有匹配行,并显示行号
-s
不显示不存在或无匹配文本的错误信息
-v
显示不包含匹配文本的所有行
-w
eg: sed -n -e ‘/tcp/p’ -e ‘/tcp/=’ type.txt 打印出包含“tcp”所在的行以及其行号,且不打印文件整个文件本身。这个等同于 sed -n -e ‘/tcp/{p,=}’ type.txt
选项
意义
-n
不打印所有行到标准输出
表示将下一个字符串解析为 sed 编辑命令,如果只传递一个编
9.sed 定位文本
选项 x x,y
/pattern/ /pattern/pattern/
/pattern/,x x,/pattern/
x,y!
意义 x 为指定行号 指定从 x 到 y 的行号范围 查询包含模式的行 查询包含两个模式的行 从与 pattern 的匹配行到 x 号行之间的行 从 x 号行到与 pattern 的匹配行之间的行 查询不包括 x 和 y 行号的行
\. \$ \^ \<\>符号是精确匹配符号,该符号利用\符号屏蔽<>符号 \<the\> 精确匹配单词 the,them, they 等不匹配 \{\}系列符号表示前一个字符的重复 \{n\}:匹配前面字符出现 n 次 ,如 JO\{3\}B 匹配 JOOOB \{n,\}:匹配前面字符至少出现 n 次,如 JO\{3,\}B 匹配 JOOOB、JOOOOB、JOOOOOB 等 字符串
2.Gedit 编辑器
图形界面编辑器,在命令行输入 Gedit+文件名即可弹出编辑器并打开文件。优点:语法 高亮,操作方便。缺点:要在图形界面下操作,远程连接比较慢。
3.罗列文件的详细信息:ls -l
如:ls -l *.txt 可以列出所有以 txt 为后缀的文件的详细信息
4.正则表达式
符号 * . ^ $ [] \
符号
意义
?
匹配 0 个或 1 个在其之前的那个普通字符
+
匹配 1 个或多个在其之前的那个普通字符
()
表示一个字符集合或用在 expr 中
|
表示“或”意义,匹配一组可选的字符
通配(globbing)是把一个包含通配符的非具体文件名扩展到存储在计算机、服务器或 者网络上的一批具体文件名的过程 最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等,通配符与元字符意义不完 全相同: *符号不再表示其前面字符的重复,而是表示任意位的任意字符
匹配整词
-r
递归搜索,不仅搜索当前工作目录,而且搜索子目录
-E
支持扩展的正则表达式
-F
不支持正则表达式,按照字符串的字面意思进行匹配
6.POSIX 字符类
为了保持不同国家的字符编码的一致性,POSIX(Portable Operating System Interface) 增加了特殊的字符类,以[:classname]的格式给出,grep 命令支持 POSIX 字符类
选项 g p
w 文件名
意义 表示替换文本中所有出现被替换字符串之处
与-n 选项结合,只打印替换行 表示将输出定向到一个文件
eg: sed -n ‘s/被替换的字符串/新字符串/p’ 目标文件。这个与 sed -n ‘y/被替换 的字符串/新字符串/’ 目标文件功能类似,不过 y 命令要求被替换的字符串和新字符串 长度相同,否则报错,而 s 命令无此限制 eg: sed -n ‘s/tcp/udp/w newtype.txt’ type.txt 将 type.txt 中的 tcp 用 udp 替换,并 将替换后的行输出到 newtype.txt 文件中 eg: sed -n ‘1,5 w output.txt’ input.txt 将 input.txt 文件中的第一行到第五行输 出到 output.txt 文件中 eg: sed -n ‘/tcpdump/ r newtype.txt’ type.txt 将 newtype.txt 中的内容插入到包
11.sed 修改方本
只需要将上例中的’i\’改成’c\’即可将目标行用脚本里的文本代替
12.sed 删除文本
eg: sed -n ‘/tcp/d’ type.txt 将 type.txt 文件中包含 tcp 的行删除
13.sed 替换文本
替换用来替换目标字符串,而修改是替换目标字符串所在的行,替换文本的格式为: s/被替换的字符串/新字符串/[替换选项]
awk 和 Perl 等 Linux 工具还支持正则表达式扩展出来的一些元字符,这些元字符如下表 所示
用方法为:awk [-F 域分隔符] ‘awk 程序段’ 输入文件。缺省的域分隔符是空格或
Tab(可以是这两者混合的)。
eg: awk -F”\t” ‘{print $2,$1}’ type.txt
type.txt 内容如下所示
1 a 1a
2 b 2b
结果:
a1
b2
注$1 表示第一个域,$0 表示所有域
?字符表示一位的任意字符 ^符号在通配中不代表行首,而是代表取反意义
5.grep 工具
grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印 出来,grep 也是 Linux 中最广泛使用的命令之一。 grep [选项] [模式] [文件…],模式可以是字符串,也可以是变量,还可以是正则表达 式,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式括起来 。模
类名
意义
[:upper:]
表示大写字母[A-Z]
[:lower:]
表示大写字母[a-z]
[:digit:]
表示阿拉伯数字[0-9]
[:alnum:]
表示大小写字母和阿拉伯数字[0-9a-zA-Z]
[:space:]
表示空格或 Tab 键
[:alpha:]
表示大小写字母[a-zA-Z]
[:cntrl:]
含 tcpdump 的行的后面
14.awk 工具及 awk 系统变量
awk 认为输入文件是结构化的,awk 将每个输入文件行定义为记录,行中的每个字符串
定义为域,域之间用空格、Tab 键或其他符号进行分割,分割域的符号就叫分隔符。awk
工具通过脚本的两种用法和 sed 命令一样,直接命令形式调用的方法有些不一样,其调
G
将保持缓冲区内容追加到模式缓冲区
eg: sed -n ‘$p’ type.txt 打印出 type.txt 文件的最后一行”$”是正则表达式,代表最后 一行。 sed -n ‘2,10!p’ type.txt 打印出除第二行到第十行外的所有行。 sed -n ‘/tcp/,$p’ type.txt 打印出除包含“tcp”的第一行到整个文件的最后一行。
Linux Shell 脚本讲解+示例 精华版
1.Vi 编辑器
向下查找:在 Normal 模式下,“/”+Keyword,如:/tcp 向上查找:在 Normal 模式下,“?”+Keyword,如:?tcp 替换:在 Normal 模式下,“:s”+“/”+Sourceword+“/”+“Destword”,如: :s/abc/bcd 全部替换:在 Normal 模式下,“:s”+“/”+Sourceword+“/”+“Destword”+“/g”, 如: :s/ad/bc/g 指定范围替换:在“:”与“s”间加入范围,如“:n1,n5s/abc/ddas/g”替换 1 至 5 行,“:1,$s/abc/ddas/g”替换全部
awk 定义了很多内建变量用于设置环境信息,我们称它们为系统变量,这些系统变量可
分为两种:○1 用于改变 awk 的缺省值,如域分隔符(FS);○2 用于定义系统值,在处理
\<\> \{n\} \{n,\}
意义 0 个或多个在*字符之前那个普通字符
匹配任意字符 匹配行首,或后面字符的非
匹配行尾 匹配字符集合 转义符,屏蔽一个元字符的特殊意义 精确匹配符号 匹配前面字符出现 n 次 匹配前面字符至少出现 n 次
\{n,m\}
匹配前面字符出现 n 次与 m 次之间
*符号用于匹配前面一个普通字符的 0 次或多次重复 hel*o:*符号前面的普通字符是 l,*字符就表示匹配 l 字符 0 次或多次,如字符串 helo、 hello、hellllllo 都可以由 hel*o 来表示 .符号用于匹配任意一个字符 „73.表示前面三个字符为任意字符,第 4 和第 5 个字符是 7 和 3,最后一个字符为任 意字符,如 xcb738、4J973U 都能匹配上述字符串 ^符号用于匹配行首,表示行首的字符是^字符后面的那个字符 ^cloud 表示匹配以 cloud 开头的行 $符号匹配行尾,$符号放在匹配字符之后 a、b、1、2 等字符属于普通字符,普通字符 可以按照字面意思理解,如:a 只能理解为英文的小写字母 a,没有其他隐藏含义。 micky$表示匹配以 micky 结尾的所有行 ^$ 表示空白行 []匹配字符集合,该符号支持穷举方法列出字符集合的所有元素 [0123456789]、[0-9]„„ [A-Za-z] [A-Za-z]* 匹配所有英文单词 \符号是转义符,用于屏蔽一个元字符的特殊意义
7.sed 工具
sed 是流编辑器,可对文本文件和标准输入进行编辑。sed 只是对缓冲区中原始文件的 副本进行编辑,并不编辑原始的文件,如果需要保存改动内容,可以选择使用下面两种
方法:重定向,w 编辑命令。 ○1 命令行中的使用方法: sed [选项] ‘sed 命令’ 输入文件 ○2 脚本文件,通过 sed 命令调用的方法:sed [选项] -f sed 脚本文件 输入文件, 该方法脚本文件的首行不以#!/bin/sed -f 开头 ○3 将 sed 命令插入脚本文件后,直接执行该脚本: ./sed 脚本文件 输入文件,该方法 脚本文件的首行是#!/bin/sed –f
10.sed 插入/追加文本
在匹配行前/后面追加文件,一般通过文件完成 eg: 脚本文件 insert.sh 内容如下: #!/bin/sed -f /file:/i\ We insert a new line 调用命令:./insert.sh type.txt 结果:在 type.txt 中包含“file:”的行的上面加入一行“We insert a new line”。把”/file:/i\” 改成“/file:/a\”则可以在目标行后追加文本“We insert a new line”
表示 Ctrl 键
[:graph:]或[:print:] [:xdigit:]
表示 ASCII 码 33-126 之间的字符 表示 16 进制数字[0-9A-Fa-f]
Linux 系统支持三种形式的 grep 命令,通常将这三种形式的 grep 命令称为 grep 命令族, 这三种形式具体为: grep:标准 grep 命令,支持基本正则表达式 egrep:扩展 grep 命令,支持基本和扩展正则表达式,等价于 grep –E fgrep:快速 grep 命令,不支持正则表达式,按照字符串的字面意思进行匹配,等价于 grep -F
-e
辑命令给 sed,-e 选项可以省略
-f
表示正在调用 sed 脚本文件
8.sed 命令
sed 经常和正则表达式结合使用
选项 p = a\
意义 打印匹配行 打印文件行号 在定位行号之后追加文本信息
i\
在定位行号之前插入文本信息
d
删除定位行
c\
用新文本替换定位文本
s
使用替换模式替换相应模式
r
从另一个文件中读文本
w
将文本写入到一个文件
y
变换字符
q
第一个模式匹配完成后退出
l
显示与八进制 ASCII 代码等价的控制字符
{}
ቤተ መጻሕፍቲ ባይዱ
在定位行执行的命令组
n
读取下一个输入行,用下一个命令处理新的行
h
将模式缓冲区文本拷贝到保持缓冲区
H
将模式缓冲区文本追加到保持缓冲区
x
互换模式缓冲区和保持缓冲区内容
g
将保持缓冲区内容拷贝到模式缓冲区
式代表要搜索的内容。如果没有[选项],命令的结果是包含目标内容的行的内容。
选项
意义
-c
只输出匹配行的数量
-i
搜索时忽略大小写
-h
查询多文件时不显示文件名
-l
只列出符合匹配的文件名,而不列出具体匹配行
-n
列出所有匹配行,并显示行号
-s
不显示不存在或无匹配文本的错误信息
-v
显示不包含匹配文本的所有行
-w
eg: sed -n -e ‘/tcp/p’ -e ‘/tcp/=’ type.txt 打印出包含“tcp”所在的行以及其行号,且不打印文件整个文件本身。这个等同于 sed -n -e ‘/tcp/{p,=}’ type.txt
选项
意义
-n
不打印所有行到标准输出
表示将下一个字符串解析为 sed 编辑命令,如果只传递一个编
9.sed 定位文本
选项 x x,y
/pattern/ /pattern/pattern/
/pattern/,x x,/pattern/
x,y!
意义 x 为指定行号 指定从 x 到 y 的行号范围 查询包含模式的行 查询包含两个模式的行 从与 pattern 的匹配行到 x 号行之间的行 从 x 号行到与 pattern 的匹配行之间的行 查询不包括 x 和 y 行号的行
\. \$ \^ \<\>符号是精确匹配符号,该符号利用\符号屏蔽<>符号 \<the\> 精确匹配单词 the,them, they 等不匹配 \{\}系列符号表示前一个字符的重复 \{n\}:匹配前面字符出现 n 次 ,如 JO\{3\}B 匹配 JOOOB \{n,\}:匹配前面字符至少出现 n 次,如 JO\{3,\}B 匹配 JOOOB、JOOOOB、JOOOOOB 等 字符串
2.Gedit 编辑器
图形界面编辑器,在命令行输入 Gedit+文件名即可弹出编辑器并打开文件。优点:语法 高亮,操作方便。缺点:要在图形界面下操作,远程连接比较慢。
3.罗列文件的详细信息:ls -l
如:ls -l *.txt 可以列出所有以 txt 为后缀的文件的详细信息
4.正则表达式
符号 * . ^ $ [] \
符号
意义
?
匹配 0 个或 1 个在其之前的那个普通字符
+
匹配 1 个或多个在其之前的那个普通字符
()
表示一个字符集合或用在 expr 中
|
表示“或”意义,匹配一组可选的字符
通配(globbing)是把一个包含通配符的非具体文件名扩展到存储在计算机、服务器或 者网络上的一批具体文件名的过程 最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等,通配符与元字符意义不完 全相同: *符号不再表示其前面字符的重复,而是表示任意位的任意字符
匹配整词
-r
递归搜索,不仅搜索当前工作目录,而且搜索子目录
-E
支持扩展的正则表达式
-F
不支持正则表达式,按照字符串的字面意思进行匹配
6.POSIX 字符类
为了保持不同国家的字符编码的一致性,POSIX(Portable Operating System Interface) 增加了特殊的字符类,以[:classname]的格式给出,grep 命令支持 POSIX 字符类
选项 g p
w 文件名
意义 表示替换文本中所有出现被替换字符串之处
与-n 选项结合,只打印替换行 表示将输出定向到一个文件
eg: sed -n ‘s/被替换的字符串/新字符串/p’ 目标文件。这个与 sed -n ‘y/被替换 的字符串/新字符串/’ 目标文件功能类似,不过 y 命令要求被替换的字符串和新字符串 长度相同,否则报错,而 s 命令无此限制 eg: sed -n ‘s/tcp/udp/w newtype.txt’ type.txt 将 type.txt 中的 tcp 用 udp 替换,并 将替换后的行输出到 newtype.txt 文件中 eg: sed -n ‘1,5 w output.txt’ input.txt 将 input.txt 文件中的第一行到第五行输 出到 output.txt 文件中 eg: sed -n ‘/tcpdump/ r newtype.txt’ type.txt 将 newtype.txt 中的内容插入到包
11.sed 修改方本
只需要将上例中的’i\’改成’c\’即可将目标行用脚本里的文本代替
12.sed 删除文本
eg: sed -n ‘/tcp/d’ type.txt 将 type.txt 文件中包含 tcp 的行删除
13.sed 替换文本
替换用来替换目标字符串,而修改是替换目标字符串所在的行,替换文本的格式为: s/被替换的字符串/新字符串/[替换选项]