正则表达式的三种类别
下面举几个例子
查找文件中的IP地址
egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file
查找文件中的邮箱地址
egrep '[a-zA-Z0-9]+\@[a-zA-Z0-9]+\.[a-zA-Z0-9]' file
sed命令
sed命令的基本格式为:
sed option ‘script’ file1 file2 …
sed option -f scriptfile file1 file2 …
sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以一次传 入多个文件,sed会依次处理。sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后加-f参数指定,编辑命令的格式为
/pattern/action
1. /pattern/p :打印匹配pattern的行
查找文件中以ad开头的行
sed -n '/^ad/p' file
- /pattern/d :删除匹配pattern的行
删除以a结尾的行
sed '/a$/d' file
删除以q开头的行
sed '/^q/d' file
- /pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行第行个匹配pattern1的字符串替换为pattern2
sed '/a$/s/a/~a~/p' file
- /pattern/s/pattern1/pattern2/g:查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2
sed '/a$/s/a/~a~/pg' file
5.在sed 后加 -i 会对原文件进行更改,不加则不会,这里不再演示
6. 定址
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
打印第三行
sed -n '3p' file
打印2-5行
sed -n '2,5p' file
正则表达式
^:行首定位符:/^a/ 匹配所有以a开头的行
$:行首定位符:/a$/ 匹配所有以a结尾的行
.:匹配除换行符以外的单个字符:/f..w/ 匹配包含字母f,后跟两个任意字符,再跟字母w的行
sed -n /f..w/g file
:匹配零个或多个前导字符:/ab/ 匹配包含string a,后跟零个或多个b字母的行
sed -n /ab*/p file
[]:匹配指定字符组内的任意字符 :/t[eE]st/ 匹配包含test或tEst的行
sed -n /t[eE]st/p file
[^]:匹配不在指定字符组内的任意字符:/t[^eE]st/ 匹配string 以t开头,但st之前的那个字符不是e或E的行
sed -n /t[^eE]st/p file
(..):保存已匹配的字符: 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第10个进行处理,tes被保存为标签1,如果发现tes,则替换为testttt。
$ sed '1,10s/\(tes\)t/\1tttt/g' file
&:保存查找串以便在替换串中引用:s/test/*&*/g 符号&代替查找串。test将被替换为*test*
sed '1,10s/test/*test*/g' file
\<:词首定位符:/\<a/ 匹配包含以a开头的单词的行
sed '/\<a/p' file
\>:词尾定位符:/a\>/ 匹配包含以a结尾的单词的行
sed '/\a/>/p' file
x{m}:连续m个x:/9{5}/ 匹配包含连续5个9的行
sed ‘/9{5}/p’ file
x{m,}:至少m个x:/9{5,}/ 匹配包含至少连续5个9的行
x{m,n}:至少m个,但不超过n个x:/9{5,7}/ 匹配包含连续5到7个9的行