liunx—sed命令

liunx三剑客之sed命令

  常用于

    处理文本文件

    分析日志文件

    修改配置文件

sed(默认不修改原文件)

原则:

  1、一次处理一行内容

  2、不改变文件内容

  3、sed可以对所有进行操作,也可以根据正则选择定行

格式:

  命令行模式:

  sed[options] 'command' file

    可选项      命令  要处理file

  options:-e ,-n, -i

  command: 行定位(正则)+sed命令操作(两部 分)

 行定位

 sed 'p' passwd  // 默认输出两行内容

sed -n '-p' passwd    //-n:忽略默认输出

 

nl passwd  //显示行号

nl -b a passwd  //空白行添加行号

 

 

nl -b a passwd|sed -n '9p'        //添加行号,输出第九行

sed -n '/cwl/p' passwd   //打印指定字符

 

nl -b a passwd|sed -n '6,10p'   //打印指定的行数6-9行

nl -b a passwd|sed -n '/news/,/list/p'   //指定news到list范围打印

nl -b a passwd|sed -n '10,/list/p'        //混合使用,指定10行到list范围内容

nl -b a passwd|sed -n '2,36!p'        //不显示指定内容!

 

nl -b a passwd|sed -n '10~2'            //开始位置~间隔几个打印(类似python步长)

 

新增    参数 a   末尾追加

nl -b a passwd|sed '1a========'  //指定第1行新增=====    在末尾

插入 参数i   开始添加

nl -b a passwd|sed '1i========'  //指定第1行新增=====    在开始位置

 

nl -b a passwd|sed '1,5i========'  //多行插入

 

代替  参数c

nl -b a passwd|sed '2,5c========'  //多行替代

 

 

删除  参数d

nl -b a passwd|sed '2d'  //删除

 

sed '/^$/d' profile123     //在正则中^$开始挨着结尾代表空白行

 

 

 

 修改文件  参数  -i

sed -i '$a 12345cwl' profile123   //修改文件(默认追加模式)

 

sed -i '$a \      234cwl\n      456cwl'      //第一个\是用来添加空格的,第二个\n用来换行的

 重定向修改  >>追加    >覆盖

sed -n '$a -n tian jia chong ding xiang' profile123>>profile123         //sed -n 追加不会添加之前内容

 

 

 替换

默认替换第一个指定元素

sed 's/nologin/login/' passwd    //全部替换为login

 替换全部指定元素  参数g

 小练习取出ip地址

 

ifconfig | sed -n '/inet /p' | sed 's/inet //' | sed 's/  netmask.*//'
//第一个管道是取inet这一行行,
//第二个管道是s替换前面
//第三个管道是替换后面
//*号代表所有       \s\代表一个空格    \s\+代表多个空格

 空格应用

ifconfig | sed -n '/inet /p' | sed 's/inet //' | sed 's/\s\+netmask.*//'

 ;多行命令同时执行     也可以把;替换成  -e

nl passwd | sed '{5,35d;s/:/@/g}'    //删除3,35行,并且把:替换为@全部替换

 

sed 's/[a-z_-]\+/&      /' passwd  //   &相当于变量前面匹配什么它就代表什么

 \U \L:对一串字符转大写小写     \u  \l:对首字母转大写或小写

sed 's/[a-z_-]\+/\u&  /' passwd  //[a-z_-]\+取key首字母,替换大写

 

cat 123.txt | sed 's/c1\(l2\)\(w3\)/\1\2/'   //\代表转义\(\)

 

 

ifconfig | sed -n '/inet.*net/p'   //查包含iner和net 关键字的一行

 

sed 's/\([a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*/\1,\2,\3/' passwd | sed -n '1,5p'
//多多理解

sed-rw

读1r  1是行数

复制abc第一行写入到123里面

 写1w

 

-q退出(执行到第N行退出)

 

 

 

 

 

 

正则表达式:

在正则表达式中  ^代表开始  (^[^0-9][0-9]$   代表开始字符是非数字如:-1,d7等)  当在一组方括号里使用 ^ 时,它表示""或"排除"的意思,常常用来剔除某个字符

         $代表结束

         .代表任意字符

         *代表0个以上

         \代表转义

[a-z]   //匹配所有的小写字母 
[A-Z]   //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9]   //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

 

[^a-z]     //除了小写字母以外的所有字符 
[^\\\/\^]   //除了(\)(/)(^)之外的所有字符 
[^\"\']    //除了双引号(")和单引号(')之外的所有字符

 详情:https://www.cnblogs.com/zery/p/3438845.html

  https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin

 

 

 脚本模式:

    sed -f scriptfile file

 

 

 

 cat  查看文件

clear 清屏

mkdir 建文件夹

cp 复制文件     可跟文件名,可跟路径

rm 删除

mv移动文件

 

 

posted @ 2019-04-26 23:18  localhost;  阅读(339)  评论(0编辑  收藏  举报