Shell 编程之正则表达式与文本处理器
正则表达式
正则表达式又称正规表达式、常规表达式
正则表达式是由普通字符与元字符组成的文字模式
正则表达式一般用于脚本编程与文本编辑器中
元字符总结
^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^”
字符本身,请使用
“\^”
$ 匹配输入字符串的结尾位置。如果设置了 RegExp
对象的
Multiline
属性,则
“$”
也匹配
‘\n’
或
‘\r’.
要匹配“$”
字符本身,请使用
“\$”
. 匹配除“\r\n”
之外的任何单个字符
\ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义
* 匹配前面的子表达式零次或多次。要匹配“*”
字符,请使用
“\*”
[] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”
可以匹配
“plain”
中的
“a”
[^] 赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]”
可以匹配
“plain”
中任何一个字母
[n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”
可以匹配
“a”
到
“z”
范围内的任一个 小写字母字符。
注意:只有连字符(
-
)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如
果出现在字符组的开头,则只能表示连字符本身
{n} n 是一个非负整数,匹配确定的
n
次。例如,
“o{2}”
不能匹配
“Bob”
中的
“o”
,但是能匹配
“food”
中 的“oo”
{n,} n 是一个非负整数,至少匹配
n
次。例如,
“o{2,}”
不能匹配
“Bob”
中的
“o”
,但能匹配
“foooood”
中的所有 o
。
“o{1,}”
等价于
“o+”
。
“o{0,}”
则等价于
“o*”
{n,m} m 和
n
均为非负整数,其中
n<=m
,最少匹配
n
次且最多匹配
m
次
扩展正则表达式
+ 作用:重复一个或者一个以上的前一个字符
? 作用:零个或者一个的前一个字符
| 作用:使用或者(or
)的方式找出多个字符
() 作用:查找“
组
”
字符串
()+ 作用:辨别多个重复的组
文本处理器
sed
工具
读取:
sed
从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓
冲区中(又称模式空间,
pattern space
)。
执行:默认情况下,所有的
sed
命令都在模式空间中顺序地执行,除非指定了行
的地址,否则
sed
命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
sed 命令常见用法
-e
或
--expression=
:表示用指定命令或者脚本来处理输入的文本文件。
-f
或
--file=
:表示用指定的脚本文件来处理输入的文本文件。
-h
或
--help
:显示帮助。
-n
、
--quiet
或
silent
:表示仅显示处理后的结果。
-i
:直接编辑文本文件。“操作
”
用于指定对文件操作的动作行为,也就是
sed
的命令
a
:增加,在当前行下面增加一行指定内容。
c
:替换,将选定行替换为指定内容。
d
:删除,删除选定的行。
i
:插入,在选定行上面插入一行指定内容。
p
:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII
码输出。其通常与
“-n”
选项一起使用。
s
:替换,替换指定字符。
y
:字符转换
awk
工具
awk
常见用法
awk 选项
'
模式或条件
{
编辑指令
}'
文件
1
文件
2 …
//过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件
1
文件
2 … //从脚本中调用编辑指令
,过滤并输出内容
awk
包含几个特殊的内建变量(可直接用)
FS
:指定每行文本的字段分隔符,默认为空格或制表位。
NF
:当前处理的行的字段个数。
NR
:当前处理的行的行号(序数)。
$0
:当前处理的行的整行内容。
$n
:当前处理行的第
n
个字段(第
n
列)。
FILENAME
:被处理的文件名。
RS
:数据记录分隔,默认为
\n
,即每行为一条记录。
sort
工具
sort
是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序
-f
:忽略大小写;
-b
:忽略每行前面的空格;
-M
:按照月份进行排序;
-n
:按照数字进行排序;
-r
:反向排序;
-u
:等同于
uniq
,表示相同的数据仅显示一行;
-t
:指定分隔符,默认使用
[Tab]
键分隔;
-o <
输出文件
>
:将排序后的结果转存至指定文件;
-k
:指定排序区域。
uniq
工具
-c:进行计数;
-d
:仅显示重复行;
-u
:仅显示出现一次的行。
tr
工具
-c
:取代所有不属于第一字符集的字符;
-d
:删除所有属于第一字符集的字符;
-s
:把连续重复的字符以单独一个字符表示;
-t
:先删除第一字符集较第二字符集多出的字符。