Back
Please upgrade your browser or check your network connection.

sed 学习记录

sed 是如何进行文本处理的?

  • sed——流处理编辑器

jpp

  • sed 一次处理一行内容
  • sed 不改变文件的内容(除非 重定向 或者 加入 -i 参数)

sed–命令行格式

1sed [options] 'command'file(s)
2
3options: -e ; -n
4
5command: 行定位(正则)+ sed命令(操作)

sed 的打印命令

1p  打印
2
3sed 'p' files.txt   #每一行都会重复
4
5加 -n 可以去掉重复项
6
7sed -n 'p' files.txt

间隔行输出

1first~step
2
3sed -n '1~2p'
4输出的行为 1,3,5,7,9
5

sed 行定位

定位一行

1x  ;  /pattern/
2
3sed -n '10p' files.txt  # 打印第十行
4
5sed -n '/mooc/p' files.txt # 匹配正则 /mooc/

定位几行

1x,y; /pattern(正则)/,x;
2
310,20;  /news/,/mooc/;
4
5sed -n '10,20p' files.txt  #打印10-20行
6
7sed -n '/news/,/mooc/p' files.txt #打印有news到mooc的行

反向定位

1x,y!; /pattern(正则)/,x!;

sed 操作命令

-a 新增行

1sed '5a =====' #在第五行后面新增 =====
2sed '1,5a ====' #在一到五行后面分布新增 ====

-i 插入行

1sed '5i =====' #在第五行前面新增 =====
2sed '1,5i ====' #在一到五行前面分布新增 ====

-i 直接修改文件

1sed -i /steamcommunity/d /etc/hosts  #删除/etc/hosts里面包含steamcommunity的行,不需要重定向。

-c 替代行

1sed '5c =====' #替换第五行为 =====
2sed '1,5c ====' #替换一到五行为 ==== (一到五行的内容都变成====)

-d 删除行

1sed '/mooc/d'  #删除mooc的一行

-s 替换 分隔符/,#等

1sed 's/old/new/' files.txt  #只替换一个

-g 全局 替换标志

1sed 's/old/new/g' files.txt

-{} 多个 sed 命令,用;分开

1sed '{20,30d;s/false/true}

-n

1sed -n '{p;n}'  #输出奇数行
2sed -n '{n;p}'  #输出偶数行

-& 替换固定字符串(优化替换操作)

1sed ’s/W/&123/'
2
3&等于W  减少前面的字符输入

-\( \) 替换某种(部分)字符串

1sed -n '/inet /p'|sed 's/inet addr:\([0-9.]\+\).*$/ip address  \1/'
2
3ip address  10.135.27.195

-r 复制指定文件插入到匹配行

1sed '1r 123.txt' abc.txt
2
3#复制123.txt的内容插入到abc.txt的第一行后面
4
5#不对源文件进行修改

-w 复制匹配行拷贝指定文件里

1sed '1w abc.txt' 123.txt
2
3#复制123.txt的第一行覆盖abc.txt
4

-q 终止/退出 sed

1
2nl passwd | sed '/false/q'  # 查到第一个发false就停止
3

sed 案例

在文件后面增加一行配置文件

1sed '$a sometext' files.txt
2$ 最后增加
3sed '$a text' files.txt

获取服务器里面的 error

1sed -n '/Error/p' files.txt

大小写转换

1元字符 \u \I \U \L 1
2转换为大写/小写字符

脚本格式

1sed -f scriptfile file(s)

取出用户名 uid

 1nobody   65534
 2libuuid   100
 3syslog   101
 4messagebus   102
 5landscape   103
 6ntp   104
 7sshd   105
 8ubuntu   500
 9
10root@VM-27-195-ubuntu:/home/ubuntu# sed 's/\(^[a-zA-Z_-]\+\):x:\([0-9]\+\).*$/\1   \2 /' /etc/passwd

jpg

Licensed under CC BY-NC-SA 4.0