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_-]\+\)❌\([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 移动文件