在shell脚本的文本处理中,sed与awk是两把利器,sed主要用于行处理。使用好会很快地进行文件的处理。
下面来看看sed的使用。
sed的使用方法如下:
sed [flag] ... {expression or script} [input_file]...
实际中更常见的表示方式:
sed [flag] 'SELECTION edit-instructions' file这里的flag选项有以下几个:
-n ,就是安静模式,一般在Linux中会将命令的输出全部打印出来,有时候我们只对sed处理过的结果感兴趣,这里我们需要使用这个选项,只仅仅将sed处理过的结果打印出来;
-e expression or script,将要处理的命令(expression or script)写入到程序的运行列表,此选项可以使sed支持多点编辑,使用多个expression或者script时,使用逗号隔开;
-f file,添加file中定义的命令到程序的运行列表;
-i ,直接修改读取的文件而不输出到终端;
-l N ,指定换行期望的长度N;
-r ,脚本中使用扩展正则表达式;
-s ,将输入的文件视为各个独立的文件而不是一个长得连续的输入;
-u ,从输入文件读取最少的数据,更频繁地刷新输出;
然后有关sed的script:
a ,此选项用来新增内容到指定行的后面,例如:'2a hello world',添加hello world到第二行的后面,'$a hello world‘添加hello world到最后一行的后面;
i ,此选项用来插入新的内容到制定的前面,和a类似;
c ,此选项用来替换指定行的内容为新内容,例如:'2c hello' '1,4c Hi';
d ,此选项用来删除指定行;
p ,此选项用来显示指定的行;
s ,此选项用来进行取代替换操作,可以结合正则表达式进行操作,例如 ‘1,20s/hello/shell/g’表示将1~20的hello全部替换为shell。
以上就是sed命令的参数说明,在实际的应用中可以结合正则表达式进行文本的处理。
正则表达式:
元字符 |
功能
|
示例
|
匹配结果
|
^
|
行首定位符
|
/^supinfo/
|
匹配所有以supinfo开头的行
|
$
|
行尾定位符
|
/supinfo$/
|
匹配所有以supinfo结尾的行
|
\<
|
词首定位符
|
/\<supinfo/
|
匹配出现以supinfo为开头的词的行
|
\>
|
词尾定位符
|
/supinfo\>/
|
匹配出现以supinfo为结尾的词的行
|
.
|
匹配一个字符
|
/su…fo/
|
包含su,后面紧跟三个任意字符,然后紧跟着fo的行
|
*
|
匹配0个或多个前一字符
|
/_*supinfo/
|
supinfo前有0个或多个下划线的行
|
[]
|
匹配一组字符里的任意字符
|
/[Ss]pinfo/
|
包含Supinfo或supinfo的行
|
[x-y]
|
匹配指定范围内的字符
|
/[A-Z0-9]supinfo/
|
supinfo之前有一个A到Z或0到9的字符
|
[^ ]
|
匹配不在指定范围内的字符
|
/[^A-Z0-9]supinfo/
|
supinfo之前有一个既不是A到Z又不是0到9的字符
|
x\{m\}
x\{m,\}
x\{m, n\}
|
根据字符x出现的次数匹配:
m次;大于等于m次;大于等于m次但小于等于n次
|
/s\{2,5\}/
|
匹配有2到5个连续出现的s的行
|
\
|
转义元字符
|
/supinfo\. /
|
匹配包含supinfo,然后后面紧跟一个句点的行(没有 \ 的时候是匹配一个字符)
|
\(…\)
|
创建一个字符标签
|
/(SUPINFO):use\1NE/
|
括号中的字符被保存在标号为1的标签里,以后可以用\1来引用。标签编号从左到右依次为1,2,3……最多可以有9个标签。这个例子查找的是SUPINFO:后面跟着一个 use SUPINFONE的字符串
|