day6:sed命令入门

sed命令主要是以行为单位对数据进行处理,可以进行替换、删除、新增、选取等操作

sed命令行格式:

         sed [options] 'command' filename

 options常用选项[-nefri]

        -n∶取消默认输出;sed默认会输出所有文本内容,使用-n参数后只显示command处理过的行

        -e∶多点编辑,允许多个脚本指令被执行。

        -r∶支持扩展正则+ ? () {} |

        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

        -i∶直接修改读取的文本内容,而不会再显示输出。 

command命令选项:

command 说明 示例
p 打印匹配行 sed -n '2p' filename  打印文本第一行内容;不加-n,则会先输出文本全部内容,再打印第二行内容
= 显示文件行号  
a 在定位行号后插入新文本信息(单独作为一行插入)  
i 在定位行号前插入新文本信息(单独作为一行插入)  
d 删除定位行   
s 使用替换模式替换相应模式  
{} 在定位行执行的命令组  
c 用新文本替换定位文本  
n 读取下一行,遇到n时会自动跳入下一行  

 

sed替换的基本语法为:

sed  's/原字符串/替换字符串/' 
但是这只会替换每行匹配到的第一个关键字;如需替换匹配到的所有关键字,可以在末尾加g来操作:
sed  's/原字符串/替换字符串/g' //替换所有匹配关键字
若需将替换操作写入文本,需添加-i选项,如 sed -i 's/原字符串/替换字符串/g' 

命令中s表示替换,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:

sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号

命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:

sed 's?原字符串?替换字符串?' //自定义分隔符为问号
 

sed中正则表达式的应用:

eg:

sed -n  '/^[0-9]/p' filename  表示打印文件中以任意数字开头的行     

command中也可使用正则表达式进行匹配:
元字符  功能  示例
^ 行首定位符  /^my/  匹配所有以my开头的行
$ 行尾定位符  /my$/  匹配所有以my结尾的行
. 匹配除换行符以外的单个字符  /m..y/  匹配包含字母m,后跟两个任意字符,再跟字母y的行
* 匹配零个或多个前导字符  /my*/  匹配包含字母m,后跟零个或多个y字母的行
[] 匹配指定字符组内的任一字符  /[Mm]y/  匹配包含My或my的行
[^] 匹配不在指定字符组内的任一字符  /[^Mm]y/  匹配包含y,但y之前的那个字符不是M或m的行
  保存已匹配的字符  1,20s/self/\1r/  标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。
& 保存查找串以便在替换串中引用  s/my/**&**/  符号&代表查找串。my将被替换为**my**
\< 词首定位符  /\<my/  匹配包含以my开头的单词的行
\> 词尾定位符  /my\>/  匹配包含以my结尾的单词的行
x\{m\} 连续m个x  /9\{5\}/ 匹配包含连续5个9的行
x\{m,\} 至少m个x  /9\{5,\}/  匹配包含至少连续5个9的行
x\{m,n\} 至少m个,但不超过n个x  /9\{5,7\}/  匹配包含连续5到7个9的行
 

更多样例参考:

 

 
posted @ 2021-11-13 21:43  诟笑  阅读(1206)  评论(0编辑  收藏  举报